/* 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 1
#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 __cplusplus
  #error "Cython files generated with the C++ option must be compiled with a C++ compiler."
#endif
#ifndef CYTHON_INLINE
  #if defined(__clang__)
    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
  #else
    #define CYTHON_INLINE inline
  #endif
#endif
template<typename T>
void __Pyx_call_destructor(T& x) {
    x.~T();
}
template<typename T>
class __Pyx_FakeReference {
  public:
    __Pyx_FakeReference() : ptr(NULL) { }
    __Pyx_FakeReference(const T& ref) : ptr(const_cast<T*>(&ref)) { }
    T *operator->() { return ptr; }
    T *operator&() { return ptr; }
    operator T&() { return *ptr; }
    template<typename U> bool operator ==(U other) { return *ptr == other; }
    template<typename U> bool operator !=(U other) { return *ptr != other; }
  private:
    T *ptr;
};

#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__pyarrow___parquet
#define __PYX_HAVE_API__pyarrow___parquet
/* Early includes */
#include <stdint.h>
#include "ios"
#include "new"
#include "stdexcept"
#include "typeinfo"
#include <memory>
#include <string.h>
#include <string>
#include <utility>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <stdio.h>
#include "pythread.h"
#include "arrow/python/platform.h"
#include <Python.h>
#include "numpy/halffloat.h"
#include "arrow/api.h"
#include "arrow/result.h"
#include "arrow/python/common.h"
#include "arrow/util/key_value_metadata.h"
#include "arrow/builder.h"
#include "arrow/io/api.h"
#include "arrow/ipc/api.h"
#include "arrow/csv/api.h"
#include "arrow/json/options.h"
#include "arrow/json/reader.h"
#include "arrow/compute/api.h"
#include "arrow/python/api.h"
#include "arrow/python/init.h"
#include "arrow/python/pyarrow.h"
#include "arrow/python/config.h"
#include "arrow/python/inference.h"
#include "arrow/extension_type.h"
#include "arrow/python/extension_type.h"
#include "arrow/python/benchmark.h"
#include "arrow/util/compression.h"
#include "arrow/util/thread_pool.h"
#include "arrow/array/concatenate.h"
#include "parquet/api/schema.h"
#include "parquet/api/reader.h"
#include "parquet/api/writer.h"
#include "parquet/arrow/reader.h"
#include "parquet/arrow/schema.h"
#include "parquet/arrow/writer.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[] = {
  "pyarrow/_parquet.pyx",
  "stringsource",
  "type.pxd",
  "bool.pxd",
  "complex.pxd",
  "pyarrow/lib.pxd",
};
/* 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()

/* ForceInitThreads.proto */
#ifndef __PYX_FORCE_INIT_THREADS
  #define __PYX_FORCE_INIT_THREADS 0
#endif


/*--- Type declarations ---*/
struct __pyx_obj_7pyarrow_3lib_Message;
struct __pyx_obj_7pyarrow_3lib_MemoryPool;
struct __pyx_obj_7pyarrow_3lib_DataType;
struct __pyx_obj_7pyarrow_3lib_ListType;
struct __pyx_obj_7pyarrow_3lib_LargeListType;
struct __pyx_obj_7pyarrow_3lib_StructType;
struct __pyx_obj_7pyarrow_3lib_DictionaryMemo;
struct __pyx_obj_7pyarrow_3lib_DictionaryType;
struct __pyx_obj_7pyarrow_3lib_TimestampType;
struct __pyx_obj_7pyarrow_3lib_Time32Type;
struct __pyx_obj_7pyarrow_3lib_Time64Type;
struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryType;
struct __pyx_obj_7pyarrow_3lib_Decimal128Type;
struct __pyx_obj_7pyarrow_3lib_BaseExtensionType;
struct __pyx_obj_7pyarrow_3lib_ExtensionType;
struct __pyx_obj_7pyarrow_3lib_PyExtensionType;
struct __pyx_obj_7pyarrow_3lib_Field;
struct __pyx_obj_7pyarrow_3lib_Schema;
struct __pyx_obj_7pyarrow_3lib_Scalar;
struct __pyx_obj_7pyarrow_3lib_NAType;
struct __pyx_obj_7pyarrow_3lib_ArrayValue;
struct __pyx_obj_7pyarrow_3lib_ScalarValue;
struct __pyx_obj_7pyarrow_3lib_Int8Value;
struct __pyx_obj_7pyarrow_3lib_Int64Value;
struct __pyx_obj_7pyarrow_3lib_ListValue;
struct __pyx_obj_7pyarrow_3lib_LargeListValue;
struct __pyx_obj_7pyarrow_3lib_StructValue;
struct __pyx_obj_7pyarrow_3lib_UnionValue;
struct __pyx_obj_7pyarrow_3lib_StringValue;
struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryValue;
struct __pyx_obj_7pyarrow_3lib__PandasConvertible;
struct __pyx_obj_7pyarrow_3lib_Array;
struct __pyx_obj_7pyarrow_3lib_Tensor;
struct __pyx_obj_7pyarrow_3lib_SparseTensorCSR;
struct __pyx_obj_7pyarrow_3lib_SparseTensorCOO;
struct __pyx_obj_7pyarrow_3lib_NullArray;
struct __pyx_obj_7pyarrow_3lib_BooleanArray;
struct __pyx_obj_7pyarrow_3lib_NumericArray;
struct __pyx_obj_7pyarrow_3lib_IntegerArray;
struct __pyx_obj_7pyarrow_3lib_FloatingPointArray;
struct __pyx_obj_7pyarrow_3lib_Int8Array;
struct __pyx_obj_7pyarrow_3lib_UInt8Array;
struct __pyx_obj_7pyarrow_3lib_Int16Array;
struct __pyx_obj_7pyarrow_3lib_UInt16Array;
struct __pyx_obj_7pyarrow_3lib_Int32Array;
struct __pyx_obj_7pyarrow_3lib_UInt32Array;
struct __pyx_obj_7pyarrow_3lib_Int64Array;
struct __pyx_obj_7pyarrow_3lib_UInt64Array;
struct __pyx_obj_7pyarrow_3lib_HalfFloatArray;
struct __pyx_obj_7pyarrow_3lib_FloatArray;
struct __pyx_obj_7pyarrow_3lib_DoubleArray;
struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryArray;
struct __pyx_obj_7pyarrow_3lib_Decimal128Array;
struct __pyx_obj_7pyarrow_3lib_StructArray;
struct __pyx_obj_7pyarrow_3lib_ListArray;
struct __pyx_obj_7pyarrow_3lib_LargeListArray;
struct __pyx_obj_7pyarrow_3lib_UnionArray;
struct __pyx_obj_7pyarrow_3lib_StringArray;
struct __pyx_obj_7pyarrow_3lib_BinaryArray;
struct __pyx_obj_7pyarrow_3lib_DictionaryArray;
struct __pyx_obj_7pyarrow_3lib_ExtensionArray;
struct __pyx_obj_7pyarrow_3lib_ChunkedArray;
struct __pyx_obj_7pyarrow_3lib_Table;
struct __pyx_obj_7pyarrow_3lib_RecordBatch;
struct __pyx_obj_7pyarrow_3lib_Buffer;
struct __pyx_obj_7pyarrow_3lib_ResizableBuffer;
struct __pyx_obj_7pyarrow_3lib_NativeFile;
struct __pyx_obj_7pyarrow_3lib_BufferedInputStream;
struct __pyx_obj_7pyarrow_3lib_BufferedOutputStream;
struct __pyx_obj_7pyarrow_3lib_CompressedInputStream;
struct __pyx_obj_7pyarrow_3lib_CompressedOutputStream;
struct __pyx_obj_7pyarrow_3lib__CRecordBatchWriter;
struct __pyx_obj_7pyarrow_3lib__CRecordBatchReader;
struct __pyx_obj_7pyarrow_8_parquet_Statistics;
struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType;
struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData;
struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData;
struct __pyx_obj_7pyarrow_8_parquet_FileMetaData;
struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema;
struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema;
struct __pyx_obj_7pyarrow_8_parquet_ParquetReader;
struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter;
struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py;
struct __pyx_opt_args_7pyarrow_3lib_ensure_type;

/* "pyarrow/lib.pxd":494
 * 
 * # Default is allow_none=False
 * cdef DataType ensure_type(object type, c_bool allow_none=*)             # <<<<<<<<<<<<<<
 * 
 * cdef shared_ptr[CKeyValueMetadata] pyarrow_unwrap_metadata(object meta)
 */
struct __pyx_opt_args_7pyarrow_3lib_ensure_type {
  int __pyx_n;
  bool allow_none;
};

/* "pyarrow/lib.pxd":36
 * cdef int check_status(const CStatus& status) nogil except -1
 * 
 * cdef class Message:             # <<<<<<<<<<<<<<
 *     cdef:
 *         unique_ptr[CMessage] message
 */
struct __pyx_obj_7pyarrow_3lib_Message {
  PyObject_HEAD
  std::unique_ptr< arrow::ipc::Message>  message;
};


/* "pyarrow/lib.pxd":41
 * 
 * 
 * cdef class MemoryPool:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CMemoryPool* pool
 */
struct __pyx_obj_7pyarrow_3lib_MemoryPool {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_MemoryPool *__pyx_vtab;
   arrow::MemoryPool *pool;
};


/* "pyarrow/lib.pxd":51
 * 
 * 
 * cdef class DataType:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CDataType] sp_type
 */
struct __pyx_obj_7pyarrow_3lib_DataType {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType *__pyx_vtab;
  std::shared_ptr< arrow::DataType>  sp_type;
   arrow::DataType *type;
  PyObject *pep3118_format;
  PyObject *__weakref__;
};


/* "pyarrow/lib.pxd":62
 * 
 * 
 * cdef class ListType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CListType* list_type
 */
struct __pyx_obj_7pyarrow_3lib_ListType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::ListType const *list_type;
};


/* "pyarrow/lib.pxd":67
 * 
 * 
 * cdef class LargeListType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CLargeListType* list_type
 */
struct __pyx_obj_7pyarrow_3lib_LargeListType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::LargeListType const *list_type;
};


/* "pyarrow/lib.pxd":72
 * 
 * 
 * cdef class StructType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CStructType* struct_type
 */
struct __pyx_obj_7pyarrow_3lib_StructType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::StructType const *struct_type;
};


/* "pyarrow/lib.pxd":80
 * 
 * 
 * cdef class DictionaryMemo:             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Even though the CDictionaryMemo instance is private, we allocate
 */
struct __pyx_obj_7pyarrow_3lib_DictionaryMemo {
  PyObject_HEAD
  std::shared_ptr< arrow::ipc::DictionaryMemo>  sp_memo;
   arrow::ipc::DictionaryMemo *memo;
};


/* "pyarrow/lib.pxd":88
 * 
 * 
 * cdef class DictionaryType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CDictionaryType* dict_type
 */
struct __pyx_obj_7pyarrow_3lib_DictionaryType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::DictionaryType const *dict_type;
};


/* "pyarrow/lib.pxd":93
 * 
 * 
 * cdef class TimestampType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CTimestampType* ts_type
 */
struct __pyx_obj_7pyarrow_3lib_TimestampType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::TimestampType const *ts_type;
};


/* "pyarrow/lib.pxd":98
 * 
 * 
 * cdef class Time32Type(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CTime32Type* time_type
 */
struct __pyx_obj_7pyarrow_3lib_Time32Type {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::Time32Type const *time_type;
};


/* "pyarrow/lib.pxd":103
 * 
 * 
 * cdef class Time64Type(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CTime64Type* time_type
 */
struct __pyx_obj_7pyarrow_3lib_Time64Type {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::Time64Type const *time_type;
};


/* "pyarrow/lib.pxd":108
 * 
 * 
 * cdef class FixedSizeBinaryType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CFixedSizeBinaryType* fixed_size_binary_type
 */
struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::FixedSizeBinaryType const *fixed_size_binary_type;
};


/* "pyarrow/lib.pxd":113
 * 
 * 
 * cdef class Decimal128Type(FixedSizeBinaryType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CDecimal128Type* decimal128_type
 */
struct __pyx_obj_7pyarrow_3lib_Decimal128Type {
  struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryType __pyx_base;
   arrow::Decimal128Type const *decimal128_type;
};


/* "pyarrow/lib.pxd":118
 * 
 * 
 * cdef class BaseExtensionType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CExtensionType* ext_type
 */
struct __pyx_obj_7pyarrow_3lib_BaseExtensionType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::ExtensionType const *ext_type;
};


/* "pyarrow/lib.pxd":123
 * 
 * 
 * cdef class ExtensionType(BaseExtensionType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CPyExtensionType* cpy_ext_type
 */
struct __pyx_obj_7pyarrow_3lib_ExtensionType {
  struct __pyx_obj_7pyarrow_3lib_BaseExtensionType __pyx_base;
   arrow::py::PyExtensionType const *cpy_ext_type;
};


/* "pyarrow/lib.pxd":128
 * 
 * 
 * cdef class PyExtensionType(ExtensionType):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_PyExtensionType {
  struct __pyx_obj_7pyarrow_3lib_ExtensionType __pyx_base;
};


/* "pyarrow/lib.pxd":132
 * 
 * 
 * cdef class Field:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CField] sp_field
 */
struct __pyx_obj_7pyarrow_3lib_Field {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_Field *__pyx_vtab;
  std::shared_ptr< arrow::Field>  sp_field;
   arrow::Field *field;
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
};


/* "pyarrow/lib.pxd":143
 * 
 * 
 * cdef class Schema:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSchema] sp_schema
 */
struct __pyx_obj_7pyarrow_3lib_Schema {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_Schema *__pyx_vtab;
  std::shared_ptr< arrow::Schema>  sp_schema;
   arrow::Schema *schema;
};


/* "pyarrow/lib.pxd":152
 * 
 * 
 * cdef class Scalar:             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType type
 */
struct __pyx_obj_7pyarrow_3lib_Scalar {
  PyObject_HEAD
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
};


/* "pyarrow/lib.pxd":157
 * 
 * 
 * cdef class NAType(Scalar):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_NAType {
  struct __pyx_obj_7pyarrow_3lib_Scalar __pyx_base;
};


/* "pyarrow/lib.pxd":161
 * 
 * 
 * cdef class ArrayValue(Scalar):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CArray] sp_array
 */
struct __pyx_obj_7pyarrow_3lib_ArrayValue {
  struct __pyx_obj_7pyarrow_3lib_Scalar __pyx_base;
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue *__pyx_vtab;
  std::shared_ptr< arrow::Array>  sp_array;
  int64_t index;
};


/* "pyarrow/lib.pxd":171
 *     cdef void _set_array(self, const shared_ptr[CArray]& sp_array)
 * 
 * cdef class ScalarValue(Scalar):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CScalar] sp_scalar
 */
struct __pyx_obj_7pyarrow_3lib_ScalarValue {
  struct __pyx_obj_7pyarrow_3lib_Scalar __pyx_base;
  struct __pyx_vtabstruct_7pyarrow_3lib_ScalarValue *__pyx_vtab;
  std::shared_ptr< arrow::Scalar>  sp_scalar;
};


/* "pyarrow/lib.pxd":177
 *     cdef void init(self, const shared_ptr[CScalar]& sp_scalar)
 * 
 * cdef class Int8Value(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Int8Value {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
};


/* "pyarrow/lib.pxd":181
 * 
 * 
 * cdef class Int64Value(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Int64Value {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
};


/* "pyarrow/lib.pxd":185
 * 
 * 
 * cdef class ListValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType value_type
 */
struct __pyx_obj_7pyarrow_3lib_ListValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
  struct __pyx_obj_7pyarrow_3lib_DataType *value_type;
   arrow::ListArray *ap;
};


/* "pyarrow/lib.pxd":196
 * 
 * 
 * cdef class LargeListValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType value_type
 */
struct __pyx_obj_7pyarrow_3lib_LargeListValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
  struct __pyx_obj_7pyarrow_3lib_DataType *value_type;
   arrow::LargeListArray *ap;
};


/* "pyarrow/lib.pxd":207
 * 
 * 
 * cdef class StructValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CStructArray* ap
 */
struct __pyx_obj_7pyarrow_3lib_StructValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
   arrow::StructArray *ap;
};


/* "pyarrow/lib.pxd":212
 * 
 * 
 * cdef class UnionValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CUnionArray* ap
 */
struct __pyx_obj_7pyarrow_3lib_UnionValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
   arrow::UnionArray *ap;
  PyObject *value_types;
};


/* "pyarrow/lib.pxd":220
 * 
 * 
 * cdef class StringValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_StringValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
};


/* "pyarrow/lib.pxd":224
 * 
 * 
 * cdef class FixedSizeBinaryValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
};


/* "pyarrow/lib.pxd":228
 * 
 * 
 * cdef class _PandasConvertible:             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib__PandasConvertible {
  PyObject_HEAD
};


/* "pyarrow/lib.pxd":232
 * 
 * 
 * cdef class Array(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CArray] sp_array
 */
struct __pyx_obj_7pyarrow_3lib_Array {
  struct __pyx_obj_7pyarrow_3lib__PandasConvertible __pyx_base;
  struct __pyx_vtabstruct_7pyarrow_3lib_Array *__pyx_vtab;
  std::shared_ptr< arrow::Array>  sp_array;
   arrow::Array *ap;
  PyObject *__weakref__;
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
  PyObject *_name;
};


/* "pyarrow/lib.pxd":248
 * 
 * 
 * cdef class Tensor:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CTensor] sp_tensor
 */
struct __pyx_obj_7pyarrow_3lib_Tensor {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_Tensor *__pyx_vtab;
  std::shared_ptr< arrow::Tensor>  sp_tensor;
   arrow::Tensor *tp;
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
};


/* "pyarrow/lib.pxd":259
 * 
 * 
 * cdef class SparseTensorCSR:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseTensorCSR] sp_sparse_tensor
 */
struct __pyx_obj_7pyarrow_3lib_SparseTensorCSR {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCSR *__pyx_vtab;
  std::shared_ptr< arrow::SparseTensorCSR>  sp_sparse_tensor;
   arrow::SparseTensorCSR *stp;
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
};


/* "pyarrow/lib.pxd":270
 * 
 * 
 * cdef class SparseTensorCOO:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseTensorCOO] sp_sparse_tensor
 */
struct __pyx_obj_7pyarrow_3lib_SparseTensorCOO {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCOO *__pyx_vtab;
  std::shared_ptr< arrow::SparseTensorCOO>  sp_sparse_tensor;
   arrow::SparseTensorCOO *stp;
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
};


/* "pyarrow/lib.pxd":281
 * 
 * 
 * cdef class NullArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_NullArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":285
 * 
 * 
 * cdef class BooleanArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_BooleanArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":289
 * 
 * 
 * cdef class NumericArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_NumericArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":293
 * 
 * 
 * cdef class IntegerArray(NumericArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_IntegerArray {
  struct __pyx_obj_7pyarrow_3lib_NumericArray __pyx_base;
};


/* "pyarrow/lib.pxd":297
 * 
 * 
 * cdef class FloatingPointArray(NumericArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_FloatingPointArray {
  struct __pyx_obj_7pyarrow_3lib_NumericArray __pyx_base;
};


/* "pyarrow/lib.pxd":301
 * 
 * 
 * cdef class Int8Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Int8Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":305
 * 
 * 
 * cdef class UInt8Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_UInt8Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":309
 * 
 * 
 * cdef class Int16Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Int16Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":313
 * 
 * 
 * cdef class UInt16Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_UInt16Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":317
 * 
 * 
 * cdef class Int32Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Int32Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":321
 * 
 * 
 * cdef class UInt32Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_UInt32Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":325
 * 
 * 
 * cdef class Int64Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Int64Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":329
 * 
 * 
 * cdef class UInt64Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_UInt64Array {
  struct __pyx_obj_7pyarrow_3lib_IntegerArray __pyx_base;
};


/* "pyarrow/lib.pxd":333
 * 
 * 
 * cdef class HalfFloatArray(FloatingPointArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_HalfFloatArray {
  struct __pyx_obj_7pyarrow_3lib_FloatingPointArray __pyx_base;
};


/* "pyarrow/lib.pxd":337
 * 
 * 
 * cdef class FloatArray(FloatingPointArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_FloatArray {
  struct __pyx_obj_7pyarrow_3lib_FloatingPointArray __pyx_base;
};


/* "pyarrow/lib.pxd":341
 * 
 * 
 * cdef class DoubleArray(FloatingPointArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_DoubleArray {
  struct __pyx_obj_7pyarrow_3lib_FloatingPointArray __pyx_base;
};


/* "pyarrow/lib.pxd":345
 * 
 * 
 * cdef class FixedSizeBinaryArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":349
 * 
 * 
 * cdef class Decimal128Array(FixedSizeBinaryArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Decimal128Array {
  struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryArray __pyx_base;
};


/* "pyarrow/lib.pxd":353
 * 
 * 
 * cdef class StructArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_StructArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":357
 * 
 * 
 * cdef class ListArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_ListArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":361
 * 
 * 
 * cdef class LargeListArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_LargeListArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":365
 * 
 * 
 * cdef class UnionArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_UnionArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":369
 * 
 * 
 * cdef class StringArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_StringArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":373
 * 
 * 
 * cdef class BinaryArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_BinaryArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":377
 * 
 * 
 * cdef class DictionaryArray(Array):             # <<<<<<<<<<<<<<
 *     cdef:
 *         object _indices, _dictionary
 */
struct __pyx_obj_7pyarrow_3lib_DictionaryArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
  PyObject *_indices;
  PyObject *_dictionary;
};


/* "pyarrow/lib.pxd":382
 * 
 * 
 * cdef class ExtensionArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_ExtensionArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":392
 * 
 * 
 * cdef class ChunkedArray(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CChunkedArray] sp_chunked_array
 */
struct __pyx_obj_7pyarrow_3lib_ChunkedArray {
  struct __pyx_obj_7pyarrow_3lib__PandasConvertible __pyx_base;
  struct __pyx_vtabstruct_7pyarrow_3lib_ChunkedArray *__pyx_vtab;
  std::shared_ptr< arrow::ChunkedArray>  sp_chunked_array;
   arrow::ChunkedArray *chunked_array;
  PyObject *_name;
};


/* "pyarrow/lib.pxd":405
 * 
 * 
 * cdef class Table(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CTable] sp_table
 */
struct __pyx_obj_7pyarrow_3lib_Table {
  struct __pyx_obj_7pyarrow_3lib__PandasConvertible __pyx_base;
  struct __pyx_vtabstruct_7pyarrow_3lib_Table *__pyx_vtab;
  std::shared_ptr< arrow::Table>  sp_table;
   arrow::Table *table;
};


/* "pyarrow/lib.pxd":413
 * 
 * 
 * cdef class RecordBatch(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CRecordBatch] sp_batch
 */
struct __pyx_obj_7pyarrow_3lib_RecordBatch {
  struct __pyx_obj_7pyarrow_3lib__PandasConvertible __pyx_base;
  struct __pyx_vtabstruct_7pyarrow_3lib_RecordBatch *__pyx_vtab;
  std::shared_ptr< arrow::RecordBatch>  sp_batch;
   arrow::RecordBatch *batch;
  struct __pyx_obj_7pyarrow_3lib_Schema *_schema;
};


/* "pyarrow/lib.pxd":422
 * 
 * 
 * cdef class Buffer:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CBuffer] buffer
 */
struct __pyx_obj_7pyarrow_3lib_Buffer {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_Buffer *__pyx_vtab;
  std::shared_ptr< arrow::Buffer>  buffer;
  Py_ssize_t shape[1];
  Py_ssize_t strides[1];
};


/* "pyarrow/lib.pxd":432
 * 
 * 
 * cdef class ResizableBuffer(Buffer):             # <<<<<<<<<<<<<<
 * 
 *     cdef void init_rz(self, const shared_ptr[CResizableBuffer]& buffer)
 */
struct __pyx_obj_7pyarrow_3lib_ResizableBuffer {
  struct __pyx_obj_7pyarrow_3lib_Buffer __pyx_base;
};


/* "pyarrow/lib.pxd":437
 * 
 * 
 * cdef class NativeFile:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[InputStream] input_stream
 */
struct __pyx_obj_7pyarrow_3lib_NativeFile {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile *__pyx_vtab;
  std::shared_ptr<arrow::io::InputStream>  input_stream;
  std::shared_ptr<arrow::io::RandomAccessFile>  random_access;
  std::shared_ptr<arrow::io::OutputStream>  output_stream;
  int is_readable;
  int is_writable;
  int is_seekable;
  int own_file;
  PyObject *__weakref__;
};


/* "pyarrow/lib.pxd":461
 * 
 * 
 * cdef class BufferedInputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_BufferedInputStream {
  struct __pyx_obj_7pyarrow_3lib_NativeFile __pyx_base;
};


/* "pyarrow/lib.pxd":465
 * 
 * 
 * cdef class BufferedOutputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_BufferedOutputStream {
  struct __pyx_obj_7pyarrow_3lib_NativeFile __pyx_base;
};


/* "pyarrow/lib.pxd":469
 * 
 * 
 * cdef class CompressedInputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_CompressedInputStream {
  struct __pyx_obj_7pyarrow_3lib_NativeFile __pyx_base;
};


/* "pyarrow/lib.pxd":473
 * 
 * 
 * cdef class CompressedOutputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_CompressedOutputStream {
  struct __pyx_obj_7pyarrow_3lib_NativeFile __pyx_base;
};


/* "pyarrow/lib.pxd":477
 * 
 * 
 * cdef class _CRecordBatchWriter:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CRecordBatchWriter] writer
 */
struct __pyx_obj_7pyarrow_3lib__CRecordBatchWriter {
  PyObject_HEAD
  std::shared_ptr< arrow::ipc::RecordBatchWriter>  writer;
};


/* "pyarrow/lib.pxd":482
 * 
 * 
 * cdef class _CRecordBatchReader:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CRecordBatchReader] reader
 */
struct __pyx_obj_7pyarrow_3lib__CRecordBatchReader {
  PyObject_HEAD
  std::shared_ptr< arrow::RecordBatchReader>  reader;
};


/* "pyarrow/_parquet.pyx":54
 * 
 * 
 * cdef class Statistics:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CStatistics] statistics
 */
struct __pyx_obj_7pyarrow_8_parquet_Statistics {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_parquet_Statistics *__pyx_vtab;
  std::shared_ptr< parquet::Statistics>  statistics;
  struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *parent;
};


/* "pyarrow/_parquet.pyx":175
 * 
 * 
 * cdef class ParquetLogicalType:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[const CParquetLogicalType] type
 */
struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetLogicalType *__pyx_vtab;
  std::shared_ptr< parquet::LogicalType const >  type;
};


/* "pyarrow/_parquet.pyx":305
 * 
 * 
 * cdef class ColumnChunkMetaData:             # <<<<<<<<<<<<<<
 *     cdef:
 *         unique_ptr[CColumnChunkMetaData] up_metadata
 */
struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_vtab;
  std::unique_ptr< parquet::ColumnChunkMetaData>  up_metadata;
   parquet::ColumnChunkMetaData *metadata;
  struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *parent;
};


/* "pyarrow/_parquet.pyx":467
 * 
 * 
 * cdef class RowGroupMetaData:             # <<<<<<<<<<<<<<
 *     cdef:
 *         int index  # for pickling support
 */
struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData {
  PyObject_HEAD
  int index;
  std::unique_ptr< parquet::RowGroupMetaData>  up_metadata;
   parquet::RowGroupMetaData *metadata;
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *parent;
};


/* "pyarrow/_parquet.pyx":555
 * 
 * 
 * cdef class FileMetaData:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CFileMetaData] sp_metadata
 */
struct __pyx_obj_7pyarrow_8_parquet_FileMetaData {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_parquet_FileMetaData *__pyx_vtab;
  std::shared_ptr< parquet::FileMetaData>  sp_metadata;
   parquet::FileMetaData *_metadata;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *_schema;
};


/* "pyarrow/_parquet.pyx":714
 * 
 * 
 * cdef class ParquetSchema:             # <<<<<<<<<<<<<<
 *     cdef:
 *         FileMetaData parent  # the FileMetaData owning the SchemaDescriptor
 */
struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema {
  PyObject_HEAD
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *parent;
  parquet::SchemaDescriptor const *schema;
};


/* "pyarrow/_parquet.pyx":788
 * 
 * 
 * cdef class ColumnSchema:             # <<<<<<<<<<<<<<
 *     cdef:
 *         int index
 */
struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema {
  PyObject_HEAD
  int index;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *parent;
   parquet::ColumnDescriptor const *descr;
};


/* "pyarrow/_parquet.pyx":995
 * 
 * 
 * cdef class ParquetReader:             # <<<<<<<<<<<<<<
 *     cdef:
 *         object source
 */
struct __pyx_obj_7pyarrow_8_parquet_ParquetReader {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetReader *__pyx_vtab;
  PyObject *source;
   arrow::MemoryPool *pool;
  std::unique_ptr<parquet::arrow::FileReader>  reader;
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *_metadata;
  PyObject *_column_idx_map;
};


/* "pyarrow/_parquet.pyx":1202
 * 
 * 
 * cdef class ParquetWriter:             # <<<<<<<<<<<<<<
 *     cdef:
 *         unique_ptr[FileWriter] writer
 */
struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *__pyx_vtab;
  std::unique_ptr<parquet::arrow::FileWriter>  writer;
  std::shared_ptr<arrow::io::OutputStream>  sink;
  int own_sink;
  PyObject *use_dictionary;
  PyObject *use_deprecated_int96_timestamps;
  PyObject *coerce_timestamps;
  PyObject *allow_truncated_timestamps;
  PyObject *compression;
  PyObject *compression_level;
  PyObject *version;
  PyObject *write_statistics;
  int row_group_size;
  int64_t data_page_size;
};


/* "cfunc.to_py":64
 * 
 * @cname("__Pyx_CFunc_object____ParquetEncoding___to_py")
 * cdef object __Pyx_CFunc_object____ParquetEncoding___to_py(object (*f)(ParquetEncoding) ):             # <<<<<<<<<<<<<<
 *     def wrap(ParquetEncoding encoding_):
 *         """wrap(encoding_: 'ParquetEncoding')"""
 */
struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py {
  PyObject_HEAD
  PyObject *(*__pyx_v_f)(enum  parquet::Encoding::type);
};



/* "pyarrow/lib.pxd":41
 * 
 * 
 * cdef class MemoryPool:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CMemoryPool* pool
 */

struct __pyx_vtabstruct_7pyarrow_3lib_MemoryPool {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_MemoryPool *,  arrow::MemoryPool *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_MemoryPool *__pyx_vtabptr_7pyarrow_3lib_MemoryPool;


/* "pyarrow/lib.pxd":51
 * 
 * 
 * cdef class DataType:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CDataType] sp_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_DataType {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_DataType *, std::shared_ptr< arrow::DataType>  const &);
  struct __pyx_obj_7pyarrow_3lib_Field *(*child)(struct __pyx_obj_7pyarrow_3lib_DataType *, int);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_DataType *__pyx_vtabptr_7pyarrow_3lib_DataType;


/* "pyarrow/lib.pxd":62
 * 
 * 
 * cdef class ListType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CListType* list_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ListType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ListType *__pyx_vtabptr_7pyarrow_3lib_ListType;


/* "pyarrow/lib.pxd":67
 * 
 * 
 * cdef class LargeListType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CLargeListType* list_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_LargeListType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_LargeListType *__pyx_vtabptr_7pyarrow_3lib_LargeListType;


/* "pyarrow/lib.pxd":72
 * 
 * 
 * cdef class StructType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CStructType* struct_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_StructType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
  struct __pyx_obj_7pyarrow_3lib_Field *(*field)(struct __pyx_obj_7pyarrow_3lib_StructType *, int);
  struct __pyx_obj_7pyarrow_3lib_Field *(*field_by_name)(struct __pyx_obj_7pyarrow_3lib_StructType *, PyObject *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_StructType *__pyx_vtabptr_7pyarrow_3lib_StructType;


/* "pyarrow/lib.pxd":88
 * 
 * 
 * cdef class DictionaryType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CDictionaryType* dict_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_DictionaryType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_DictionaryType *__pyx_vtabptr_7pyarrow_3lib_DictionaryType;


/* "pyarrow/lib.pxd":93
 * 
 * 
 * cdef class TimestampType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CTimestampType* ts_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_TimestampType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_TimestampType *__pyx_vtabptr_7pyarrow_3lib_TimestampType;


/* "pyarrow/lib.pxd":98
 * 
 * 
 * cdef class Time32Type(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CTime32Type* time_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Time32Type {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Time32Type *__pyx_vtabptr_7pyarrow_3lib_Time32Type;


/* "pyarrow/lib.pxd":103
 * 
 * 
 * cdef class Time64Type(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CTime64Type* time_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Time64Type {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Time64Type *__pyx_vtabptr_7pyarrow_3lib_Time64Type;


/* "pyarrow/lib.pxd":108
 * 
 * 
 * cdef class FixedSizeBinaryType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CFixedSizeBinaryType* fixed_size_binary_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryType *__pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryType;


/* "pyarrow/lib.pxd":113
 * 
 * 
 * cdef class Decimal128Type(FixedSizeBinaryType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CDecimal128Type* decimal128_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Decimal128Type {
  struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Decimal128Type *__pyx_vtabptr_7pyarrow_3lib_Decimal128Type;


/* "pyarrow/lib.pxd":118
 * 
 * 
 * cdef class BaseExtensionType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CExtensionType* ext_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_BaseExtensionType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_BaseExtensionType *__pyx_vtabptr_7pyarrow_3lib_BaseExtensionType;


/* "pyarrow/lib.pxd":123
 * 
 * 
 * cdef class ExtensionType(BaseExtensionType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CPyExtensionType* cpy_ext_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ExtensionType {
  struct __pyx_vtabstruct_7pyarrow_3lib_BaseExtensionType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ExtensionType *__pyx_vtabptr_7pyarrow_3lib_ExtensionType;


/* "pyarrow/lib.pxd":128
 * 
 * 
 * cdef class PyExtensionType(ExtensionType):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_PyExtensionType {
  struct __pyx_vtabstruct_7pyarrow_3lib_ExtensionType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_PyExtensionType *__pyx_vtabptr_7pyarrow_3lib_PyExtensionType;


/* "pyarrow/lib.pxd":132
 * 
 * 
 * cdef class Field:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CField] sp_field
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Field {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_Field *, std::shared_ptr< arrow::Field>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Field *__pyx_vtabptr_7pyarrow_3lib_Field;


/* "pyarrow/lib.pxd":143
 * 
 * 
 * cdef class Schema:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSchema] sp_schema
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Schema {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_Schema *, std::vector<std::shared_ptr< arrow::Field> >  const &);
  void (*init_schema)(struct __pyx_obj_7pyarrow_3lib_Schema *, std::shared_ptr< arrow::Schema>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Schema *__pyx_vtabptr_7pyarrow_3lib_Schema;


/* "pyarrow/lib.pxd":161
 * 
 * 
 * cdef class ArrayValue(Scalar):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CArray] sp_array
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_ArrayValue *, struct __pyx_obj_7pyarrow_3lib_DataType *, std::shared_ptr< arrow::Array>  const &, int64_t);
  void (*_set_array)(struct __pyx_obj_7pyarrow_3lib_ArrayValue *, std::shared_ptr< arrow::Array>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue *__pyx_vtabptr_7pyarrow_3lib_ArrayValue;


/* "pyarrow/lib.pxd":171
 *     cdef void _set_array(self, const shared_ptr[CArray]& sp_array)
 * 
 * cdef class ScalarValue(Scalar):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CScalar] sp_scalar
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ScalarValue {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_ScalarValue *, std::shared_ptr< arrow::Scalar>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ScalarValue *__pyx_vtabptr_7pyarrow_3lib_ScalarValue;


/* "pyarrow/lib.pxd":177
 *     cdef void init(self, const shared_ptr[CScalar]& sp_scalar)
 * 
 * cdef class Int8Value(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Int8Value {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Int8Value *__pyx_vtabptr_7pyarrow_3lib_Int8Value;


/* "pyarrow/lib.pxd":181
 * 
 * 
 * cdef class Int64Value(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Int64Value {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Int64Value *__pyx_vtabptr_7pyarrow_3lib_Int64Value;


/* "pyarrow/lib.pxd":185
 * 
 * 
 * cdef class ListValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType value_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ListValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_ListValue *, int64_t);
  int64_t (*length)(struct __pyx_obj_7pyarrow_3lib_ListValue *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ListValue *__pyx_vtabptr_7pyarrow_3lib_ListValue;


/* "pyarrow/lib.pxd":196
 * 
 * 
 * cdef class LargeListValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType value_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_LargeListValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_LargeListValue *, int64_t);
  int64_t (*length)(struct __pyx_obj_7pyarrow_3lib_LargeListValue *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_LargeListValue *__pyx_vtabptr_7pyarrow_3lib_LargeListValue;


/* "pyarrow/lib.pxd":207
 * 
 * 
 * cdef class StructValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CStructArray* ap
 */

struct __pyx_vtabstruct_7pyarrow_3lib_StructValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_StructValue *__pyx_vtabptr_7pyarrow_3lib_StructValue;


/* "pyarrow/lib.pxd":212
 * 
 * 
 * cdef class UnionValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CUnionArray* ap
 */

struct __pyx_vtabstruct_7pyarrow_3lib_UnionValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_UnionValue *, int64_t);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_UnionValue *__pyx_vtabptr_7pyarrow_3lib_UnionValue;


/* "pyarrow/lib.pxd":220
 * 
 * 
 * cdef class StringValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_StringValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_StringValue *__pyx_vtabptr_7pyarrow_3lib_StringValue;


/* "pyarrow/lib.pxd":224
 * 
 * 
 * cdef class FixedSizeBinaryValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryValue *__pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryValue;


/* "pyarrow/lib.pxd":232
 * 
 * 
 * cdef class Array(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CArray] sp_array
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Array {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_Array *, std::shared_ptr< arrow::Array>  const &);
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_Array *, int64_t);
  int64_t (*length)(struct __pyx_obj_7pyarrow_3lib_Array *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Array *__pyx_vtabptr_7pyarrow_3lib_Array;


/* "pyarrow/lib.pxd":248
 * 
 * 
 * cdef class Tensor:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CTensor] sp_tensor
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Tensor {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_Tensor *, std::shared_ptr< arrow::Tensor>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Tensor *__pyx_vtabptr_7pyarrow_3lib_Tensor;


/* "pyarrow/lib.pxd":259
 * 
 * 
 * cdef class SparseTensorCSR:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseTensorCSR] sp_sparse_tensor
 */

struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCSR {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_SparseTensorCSR *, std::shared_ptr< arrow::SparseTensorCSR>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCSR *__pyx_vtabptr_7pyarrow_3lib_SparseTensorCSR;


/* "pyarrow/lib.pxd":270
 * 
 * 
 * cdef class SparseTensorCOO:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseTensorCOO] sp_sparse_tensor
 */

struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCOO {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_SparseTensorCOO *, std::shared_ptr< arrow::SparseTensorCOO>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCOO *__pyx_vtabptr_7pyarrow_3lib_SparseTensorCOO;


/* "pyarrow/lib.pxd":281
 * 
 * 
 * cdef class NullArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_NullArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_NullArray *__pyx_vtabptr_7pyarrow_3lib_NullArray;


/* "pyarrow/lib.pxd":285
 * 
 * 
 * cdef class BooleanArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_BooleanArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_BooleanArray *__pyx_vtabptr_7pyarrow_3lib_BooleanArray;


/* "pyarrow/lib.pxd":289
 * 
 * 
 * cdef class NumericArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_NumericArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_NumericArray *__pyx_vtabptr_7pyarrow_3lib_NumericArray;


/* "pyarrow/lib.pxd":293
 * 
 * 
 * cdef class IntegerArray(NumericArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_NumericArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray *__pyx_vtabptr_7pyarrow_3lib_IntegerArray;


/* "pyarrow/lib.pxd":297
 * 
 * 
 * cdef class FloatingPointArray(NumericArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_FloatingPointArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_NumericArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FloatingPointArray *__pyx_vtabptr_7pyarrow_3lib_FloatingPointArray;


/* "pyarrow/lib.pxd":301
 * 
 * 
 * cdef class Int8Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Int8Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Int8Array *__pyx_vtabptr_7pyarrow_3lib_Int8Array;


/* "pyarrow/lib.pxd":305
 * 
 * 
 * cdef class UInt8Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_UInt8Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_UInt8Array *__pyx_vtabptr_7pyarrow_3lib_UInt8Array;


/* "pyarrow/lib.pxd":309
 * 
 * 
 * cdef class Int16Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Int16Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Int16Array *__pyx_vtabptr_7pyarrow_3lib_Int16Array;


/* "pyarrow/lib.pxd":313
 * 
 * 
 * cdef class UInt16Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_UInt16Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_UInt16Array *__pyx_vtabptr_7pyarrow_3lib_UInt16Array;


/* "pyarrow/lib.pxd":317
 * 
 * 
 * cdef class Int32Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Int32Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Int32Array *__pyx_vtabptr_7pyarrow_3lib_Int32Array;


/* "pyarrow/lib.pxd":321
 * 
 * 
 * cdef class UInt32Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_UInt32Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_UInt32Array *__pyx_vtabptr_7pyarrow_3lib_UInt32Array;


/* "pyarrow/lib.pxd":325
 * 
 * 
 * cdef class Int64Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Int64Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Int64Array *__pyx_vtabptr_7pyarrow_3lib_Int64Array;


/* "pyarrow/lib.pxd":329
 * 
 * 
 * cdef class UInt64Array(IntegerArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_UInt64Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_UInt64Array *__pyx_vtabptr_7pyarrow_3lib_UInt64Array;


/* "pyarrow/lib.pxd":333
 * 
 * 
 * cdef class HalfFloatArray(FloatingPointArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_HalfFloatArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_FloatingPointArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_HalfFloatArray *__pyx_vtabptr_7pyarrow_3lib_HalfFloatArray;


/* "pyarrow/lib.pxd":337
 * 
 * 
 * cdef class FloatArray(FloatingPointArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_FloatArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_FloatingPointArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FloatArray *__pyx_vtabptr_7pyarrow_3lib_FloatArray;


/* "pyarrow/lib.pxd":341
 * 
 * 
 * cdef class DoubleArray(FloatingPointArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_DoubleArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_FloatingPointArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_DoubleArray *__pyx_vtabptr_7pyarrow_3lib_DoubleArray;


/* "pyarrow/lib.pxd":345
 * 
 * 
 * cdef class FixedSizeBinaryArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryArray *__pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryArray;


/* "pyarrow/lib.pxd":349
 * 
 * 
 * cdef class Decimal128Array(FixedSizeBinaryArray):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Decimal128Array {
  struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryArray __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Decimal128Array *__pyx_vtabptr_7pyarrow_3lib_Decimal128Array;


/* "pyarrow/lib.pxd":353
 * 
 * 
 * cdef class StructArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_StructArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_StructArray *__pyx_vtabptr_7pyarrow_3lib_StructArray;


/* "pyarrow/lib.pxd":357
 * 
 * 
 * cdef class ListArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ListArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ListArray *__pyx_vtabptr_7pyarrow_3lib_ListArray;


/* "pyarrow/lib.pxd":361
 * 
 * 
 * cdef class LargeListArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_LargeListArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_LargeListArray *__pyx_vtabptr_7pyarrow_3lib_LargeListArray;


/* "pyarrow/lib.pxd":365
 * 
 * 
 * cdef class UnionArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_UnionArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_UnionArray *__pyx_vtabptr_7pyarrow_3lib_UnionArray;


/* "pyarrow/lib.pxd":369
 * 
 * 
 * cdef class StringArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_StringArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_StringArray *__pyx_vtabptr_7pyarrow_3lib_StringArray;


/* "pyarrow/lib.pxd":373
 * 
 * 
 * cdef class BinaryArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_BinaryArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_BinaryArray *__pyx_vtabptr_7pyarrow_3lib_BinaryArray;


/* "pyarrow/lib.pxd":377
 * 
 * 
 * cdef class DictionaryArray(Array):             # <<<<<<<<<<<<<<
 *     cdef:
 *         object _indices, _dictionary
 */

struct __pyx_vtabstruct_7pyarrow_3lib_DictionaryArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_DictionaryArray *__pyx_vtabptr_7pyarrow_3lib_DictionaryArray;


/* "pyarrow/lib.pxd":382
 * 
 * 
 * cdef class ExtensionArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ExtensionArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ExtensionArray *__pyx_vtabptr_7pyarrow_3lib_ExtensionArray;


/* "pyarrow/lib.pxd":392
 * 
 * 
 * cdef class ChunkedArray(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CChunkedArray] sp_chunked_array
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ChunkedArray {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_ChunkedArray *, std::shared_ptr< arrow::ChunkedArray>  const &);
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_ChunkedArray *, int64_t);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ChunkedArray *__pyx_vtabptr_7pyarrow_3lib_ChunkedArray;


/* "pyarrow/lib.pxd":405
 * 
 * 
 * cdef class Table(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CTable] sp_table
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Table {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_Table *, std::shared_ptr< arrow::Table>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Table *__pyx_vtabptr_7pyarrow_3lib_Table;


/* "pyarrow/lib.pxd":413
 * 
 * 
 * cdef class RecordBatch(_PandasConvertible):             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CRecordBatch] sp_batch
 */

struct __pyx_vtabstruct_7pyarrow_3lib_RecordBatch {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_RecordBatch *, std::shared_ptr< arrow::RecordBatch>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_RecordBatch *__pyx_vtabptr_7pyarrow_3lib_RecordBatch;


/* "pyarrow/lib.pxd":422
 * 
 * 
 * cdef class Buffer:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CBuffer] buffer
 */

struct __pyx_vtabstruct_7pyarrow_3lib_Buffer {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_Buffer *, std::shared_ptr< arrow::Buffer>  const &);
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_Buffer *, int64_t);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_Buffer *__pyx_vtabptr_7pyarrow_3lib_Buffer;


/* "pyarrow/lib.pxd":432
 * 
 * 
 * cdef class ResizableBuffer(Buffer):             # <<<<<<<<<<<<<<
 * 
 *     cdef void init_rz(self, const shared_ptr[CResizableBuffer]& buffer)
 */

struct __pyx_vtabstruct_7pyarrow_3lib_ResizableBuffer {
  struct __pyx_vtabstruct_7pyarrow_3lib_Buffer __pyx_base;
  void (*init_rz)(struct __pyx_obj_7pyarrow_3lib_ResizableBuffer *, std::shared_ptr< arrow::ResizableBuffer>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_ResizableBuffer *__pyx_vtabptr_7pyarrow_3lib_ResizableBuffer;


/* "pyarrow/lib.pxd":437
 * 
 * 
 * cdef class NativeFile:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[InputStream] input_stream
 */

struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile {
  PyObject *(*set_random_access_file)(struct __pyx_obj_7pyarrow_3lib_NativeFile *, std::shared_ptr<arrow::io::RandomAccessFile> );
  PyObject *(*set_input_stream)(struct __pyx_obj_7pyarrow_3lib_NativeFile *, std::shared_ptr<arrow::io::InputStream> );
  PyObject *(*set_output_stream)(struct __pyx_obj_7pyarrow_3lib_NativeFile *, std::shared_ptr<arrow::io::OutputStream> );
  std::shared_ptr<arrow::io::RandomAccessFile>  (*get_random_access_file)(struct __pyx_obj_7pyarrow_3lib_NativeFile *);
  std::shared_ptr<arrow::io::InputStream>  (*get_input_stream)(struct __pyx_obj_7pyarrow_3lib_NativeFile *);
  std::shared_ptr<arrow::io::OutputStream>  (*get_output_stream)(struct __pyx_obj_7pyarrow_3lib_NativeFile *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile *__pyx_vtabptr_7pyarrow_3lib_NativeFile;


/* "pyarrow/lib.pxd":461
 * 
 * 
 * cdef class BufferedInputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_BufferedInputStream {
  struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_BufferedInputStream *__pyx_vtabptr_7pyarrow_3lib_BufferedInputStream;


/* "pyarrow/lib.pxd":465
 * 
 * 
 * cdef class BufferedOutputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_BufferedOutputStream {
  struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_BufferedOutputStream *__pyx_vtabptr_7pyarrow_3lib_BufferedOutputStream;


/* "pyarrow/lib.pxd":469
 * 
 * 
 * cdef class CompressedInputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_CompressedInputStream {
  struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_CompressedInputStream *__pyx_vtabptr_7pyarrow_3lib_CompressedInputStream;


/* "pyarrow/lib.pxd":473
 * 
 * 
 * cdef class CompressedOutputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_CompressedOutputStream {
  struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_CompressedOutputStream *__pyx_vtabptr_7pyarrow_3lib_CompressedOutputStream;


/* "pyarrow/_parquet.pyx":54
 * 
 * 
 * cdef class Statistics:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CStatistics] statistics
 */

struct __pyx_vtabstruct_7pyarrow_8_parquet_Statistics {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_parquet_Statistics *, std::shared_ptr< parquet::Statistics>  const &, struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *);
};
static struct __pyx_vtabstruct_7pyarrow_8_parquet_Statistics *__pyx_vtabptr_7pyarrow_8_parquet_Statistics;


/* "pyarrow/_parquet.pyx":175
 * 
 * 
 * cdef class ParquetLogicalType:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[const CParquetLogicalType] type
 */

struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetLogicalType {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *, std::shared_ptr< parquet::LogicalType const >  const &);
};
static struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetLogicalType *__pyx_vtabptr_7pyarrow_8_parquet_ParquetLogicalType;


/* "pyarrow/_parquet.pyx":305
 * 
 * 
 * cdef class ColumnChunkMetaData:             # <<<<<<<<<<<<<<
 *     cdef:
 *         unique_ptr[CColumnChunkMetaData] up_metadata
 */

struct __pyx_vtabstruct_7pyarrow_8_parquet_ColumnChunkMetaData {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *, struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *, int);
};
static struct __pyx_vtabstruct_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_vtabptr_7pyarrow_8_parquet_ColumnChunkMetaData;


/* "pyarrow/_parquet.pyx":555
 * 
 * 
 * cdef class FileMetaData:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CFileMetaData] sp_metadata
 */

struct __pyx_vtabstruct_7pyarrow_8_parquet_FileMetaData {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *, std::shared_ptr< parquet::FileMetaData>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_8_parquet_FileMetaData *__pyx_vtabptr_7pyarrow_8_parquet_FileMetaData;


/* "pyarrow/_parquet.pyx":995
 * 
 * 
 * cdef class ParquetReader:             # <<<<<<<<<<<<<<
 *     cdef:
 *         object source
 */

struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetReader {
  PyObject *(*_set_read_dictionary)(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *, PyObject *, parquet::ArrowReaderProperties *);
};
static struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetReader *__pyx_vtabptr_7pyarrow_8_parquet_ParquetReader;


/* "pyarrow/_parquet.pyx":1202
 * 
 * 
 * cdef class ParquetWriter:             # <<<<<<<<<<<<<<
 *     cdef:
 *         unique_ptr[FileWriter] writer
 */

struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter {
  void (*_set_int96_support)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::ArrowWriterProperties::Builder *);
  int (*_set_coerce_timestamps)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::ArrowWriterProperties::Builder *);
  void (*_set_allow_truncated_timestamps)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::ArrowWriterProperties::Builder *);
  void (*_set_version)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *);
  void (*_set_compression_props)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *);
  void (*_set_dictionary_props)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *);
  void (*_set_statistics_props)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *);
};
static struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *__pyx_vtabptr_7pyarrow_8_parquet_ParquetWriter;

/* --- 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);

/* 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);

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

/* 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

/* 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

/* 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

/* 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);

/* 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

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

/* 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

/* 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

/* 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);

/* 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

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

/* 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);

/* 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

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

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

/* 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);

/* 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

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

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

/* 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

/* 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

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

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

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

/* PyObjectCallMethod0.proto */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);

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

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

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

/* RaiseNoneIterError.proto */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);

/* UnpackTupleError.proto */
static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index);

/* UnpackTuple2.proto */
#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\
    (likely(is_tuple || PyTuple_Check(tuple)) ?\
        (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\
            __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\
            (__Pyx_UnpackTupleError(tuple, 2), -1)) :\
        __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple))
static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
    PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple);
static int __Pyx_unpack_tuple2_generic(
    PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple);

/* dict_iter.proto */
static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
                                                   Py_ssize_t* p_orig_length, int* p_is_dict);
static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);

/* PyIntCompare.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, long inplace);

/* 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);

/* 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);

/* SetupReduce.proto */
static int __Pyx_setup_reduce(PyObject* type_obj);

/* TypeImport.proto */
#ifndef __PYX_HAVE_RT_ImportType_proto
#define __PYX_HAVE_RT_ImportType_proto
enum __Pyx_ImportType_CheckSize {
   __Pyx_ImportType_CheckSize_Error = 0,
   __Pyx_ImportType_CheckSize_Warn = 1,
   __Pyx_ImportType_CheckSize_Ignore = 2
};
static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size);
#endif

/* GetVTable.proto */
static void* __Pyx_GetVtable(PyObject *dict);

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

/* 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);

/* None.proto */
#include <new>

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int32_t(int32_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____arrow_3a__3a_TimeUnit_3a__3a_type(enum  arrow::TimeUnit::type value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type(enum  parquet::Encoding::type value);

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_ParquetVersion_3a__3a_type(enum  parquet::ParquetVersion::type value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int16_t(int16_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type(enum  parquet::Type::type value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type(enum  parquet::LogicalType::Type::type value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type(enum  parquet::ConvertedType::type value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type(enum  parquet::Compression::type value);

/* CppExceptionConversion.proto */
#ifndef __Pyx_CppExn2PyErr
#include <new>
#include <typeinfo>
#include <stdexcept>
#include <ios>
static void __Pyx_CppExn2PyErr() {
  try {
    if (PyErr_Occurred())
      ; // let the latest Python exn pass through and ignore the current one
    else
      throw;
  } catch (const std::bad_alloc& exn) {
    PyErr_SetString(PyExc_MemoryError, exn.what());
  } catch (const std::bad_cast& exn) {
    PyErr_SetString(PyExc_TypeError, exn.what());
  } catch (const std::bad_typeid& exn) {
    PyErr_SetString(PyExc_TypeError, exn.what());
  } catch (const std::domain_error& exn) {
    PyErr_SetString(PyExc_ValueError, exn.what());
  } catch (const std::invalid_argument& exn) {
    PyErr_SetString(PyExc_ValueError, exn.what());
  } catch (const std::ios_base::failure& exn) {
    PyErr_SetString(PyExc_IOError, exn.what());
  } catch (const std::out_of_range& exn) {
    PyErr_SetString(PyExc_IndexError, exn.what());
  } catch (const std::overflow_error& exn) {
    PyErr_SetString(PyExc_OverflowError, exn.what());
  } catch (const std::range_error& exn) {
    PyErr_SetString(PyExc_ArithmeticError, exn.what());
  } catch (const std::underflow_error& exn) {
    PyErr_SetString(PyExc_ArithmeticError, exn.what());
  } catch (const std::exception& exn) {
    PyErr_SetString(PyExc_RuntimeError, exn.what());
  }
  catch (...)
  {
    PyErr_SetString(PyExc_RuntimeError, "Unknown exception");
  }
}
#endif

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

/* CIntFromPy.proto */
static CYTHON_INLINE enum  parquet::Encoding::type __Pyx_PyInt_As_enum____parquet_3a__3a_Encoding_3a__3a_type(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE int32_t __Pyx_PyInt_As_int32_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);

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

/* 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);

/* FunctionImport.proto */
static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig);

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

static PyObject *__pyx_f_7pyarrow_8_parquet_10Statistics_init(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, std::shared_ptr< parquet::Statistics>  const &__pyx_v_statistics, struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_parent); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_18ParquetLogicalType_init(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self, std::shared_ptr< parquet::LogicalType const >  const &__pyx_v_type); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_19ColumnChunkMetaData_init(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_parent, int __pyx_v_i); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_12FileMetaData_init(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, std::shared_ptr< parquet::FileMetaData>  const &__pyx_v_metadata); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_13ParquetReader__set_read_dictionary(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_read_dictionary, parquet::ArrowReaderProperties *__pyx_v_props); /* proto*/
static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_int96_support(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::ArrowWriterProperties::Builder *__pyx_v_props); /* proto*/
static int __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_coerce_timestamps(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::ArrowWriterProperties::Builder *__pyx_v_props); /* proto*/
static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_allow_truncated_timestamps(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::ArrowWriterProperties::Builder *__pyx_v_props); /* proto*/
static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_version(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props); /* proto*/
static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_compression_props(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props); /* proto*/
static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_dictionary_props(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props); /* proto*/
static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_statistics_props(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props); /* proto*/

/* Module declarations from 'libc.stdint' */

/* Module declarations from 'libcpp' */

/* Module declarations from 'libcpp.memory' */

/* Module declarations from 'libc.string' */

/* Module declarations from 'libcpp.string' */

/* Module declarations from 'libcpp.utility' */

/* Module declarations from 'libcpp.vector' */

/* Module declarations from 'libcpp.unordered_map' */

/* Module declarations from 'libcpp.unordered_set' */

/* Module declarations from 'cpython.version' */

/* Module declarations from '__builtin__' */

/* Module declarations from 'cpython.type' */
static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;

/* Module declarations from 'libc.stdio' */

/* Module declarations from 'cpython.object' */

/* Module declarations from 'cpython.ref' */

/* Module declarations from 'cpython.exc' */

/* Module declarations from 'cpython.module' */

/* Module declarations from 'cpython.mem' */

/* Module declarations from 'cpython.tuple' */

/* Module declarations from 'cpython.list' */

/* Module declarations from 'cpython.sequence' */

/* Module declarations from 'cpython.mapping' */

/* Module declarations from 'cpython.iterator' */

/* Module declarations from 'cpython.number' */

/* Module declarations from 'cpython.int' */

/* Module declarations from '__builtin__' */

/* Module declarations from 'cpython.bool' */
static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0;

/* Module declarations from 'cpython.long' */

/* Module declarations from 'cpython.float' */

/* Module declarations from '__builtin__' */

/* Module declarations from 'cpython.complex' */
static PyTypeObject *__pyx_ptype_7cpython_7complex_complex = 0;

/* Module declarations from 'cpython.string' */

/* Module declarations from 'cpython.unicode' */

/* Module declarations from 'cpython.dict' */

/* Module declarations from 'cpython.instance' */

/* Module declarations from 'cpython.function' */

/* Module declarations from 'cpython.method' */

/* Module declarations from 'cpython.weakref' */

/* Module declarations from 'cpython.getargs' */

/* Module declarations from 'cpython.pythread' */

/* Module declarations from 'cpython.pystate' */

/* Module declarations from 'cpython.cobject' */

/* Module declarations from 'cpython.oldbuffer' */

/* Module declarations from 'cpython.set' */

/* Module declarations from 'cpython.buffer' */

/* Module declarations from 'cpython.bytes' */

/* Module declarations from 'cpython.pycapsule' */

/* Module declarations from 'cpython' */

/* Module declarations from 'pyarrow.includes.common' */

/* Module declarations from 'pyarrow.includes.libarrow' */

/* Module declarations from 'libcpp.cast' */

/* Module declarations from 'pyarrow.lib' */
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Message = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_MemoryPool = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_DataType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ListType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_LargeListType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_StructType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_DictionaryMemo = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_DictionaryType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_TimestampType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Time32Type = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Time64Type = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Decimal128Type = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_BaseExtensionType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ExtensionType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_PyExtensionType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Field = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Schema = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Scalar = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_NAType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ArrayValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ScalarValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Int8Value = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Int64Value = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ListValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_LargeListValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_StructValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_UnionValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_StringValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib__PandasConvertible = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Tensor = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_SparseTensorCSR = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_SparseTensorCOO = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_NullArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_BooleanArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_NumericArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_IntegerArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FloatingPointArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Int8Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_UInt8Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Int16Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_UInt16Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Int32Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_UInt32Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Int64Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_UInt64Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_HalfFloatArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FloatArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_DoubleArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Decimal128Array = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_StructArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ListArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_LargeListArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_UnionArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_StringArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_BinaryArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_DictionaryArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ExtensionArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ChunkedArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Table = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_RecordBatch = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_Buffer = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_ResizableBuffer = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_NativeFile = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_BufferedInputStream = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_BufferedOutputStream = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_CompressedInputStream = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_CompressedOutputStream = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib__CRecordBatchWriter = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib__CRecordBatchReader = 0;
static int (*__pyx_f_7pyarrow_3lib_check_status)(arrow::Status const &); /*proto*/
static  arrow::MemoryPool *(*__pyx_f_7pyarrow_3lib_maybe_unbox_memory_pool)(struct __pyx_obj_7pyarrow_3lib_MemoryPool *); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_get_reader)(PyObject *, bool, std::shared_ptr<arrow::io::RandomAccessFile>  *); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_get_writer)(PyObject *, std::shared_ptr<arrow::io::OutputStream>  *); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_array)(std::shared_ptr< arrow::Array>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_chunked_array)(std::shared_ptr< arrow::ChunkedArray>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_batch)(std::shared_ptr< arrow::RecordBatch>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_buffer)(std::shared_ptr< arrow::Buffer>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_data_type)(std::shared_ptr< arrow::DataType>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_field)(std::shared_ptr< arrow::Field>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_resizable_buffer)(std::shared_ptr< arrow::ResizableBuffer>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_schema)(std::shared_ptr< arrow::Schema>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_table)(std::shared_ptr< arrow::Table>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_tensor)(std::shared_ptr< arrow::Tensor>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_sparse_tensor_coo)(std::shared_ptr< arrow::SparseTensorCOO>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_sparse_tensor_csr)(std::shared_ptr< arrow::SparseTensorCSR>  const &); /*proto*/
static std::shared_ptr< arrow::Array>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_array)(PyObject *); /*proto*/
static std::shared_ptr< arrow::RecordBatch>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_batch)(PyObject *); /*proto*/
static std::shared_ptr< arrow::Buffer>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_buffer)(PyObject *); /*proto*/
static std::shared_ptr< arrow::DataType>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_data_type)(PyObject *); /*proto*/
static std::shared_ptr< arrow::Field>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_field)(PyObject *); /*proto*/
static std::shared_ptr< arrow::Schema>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema)(PyObject *); /*proto*/
static std::shared_ptr< arrow::Table>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_table)(PyObject *); /*proto*/
static std::shared_ptr< arrow::Tensor>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_tensor)(PyObject *); /*proto*/
static std::shared_ptr< arrow::SparseTensorCOO>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_sparse_tensor_coo)(PyObject *); /*proto*/
static std::shared_ptr< arrow::SparseTensorCSR>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_sparse_tensor_csr)(PyObject *); /*proto*/

/* Module declarations from 'pyarrow._parquet' */
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_Statistics = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_ParquetLogicalType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_ColumnChunkMetaData = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_RowGroupMetaData = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_FileMetaData = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_ParquetSchema = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_ColumnSchema = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_ParquetReader = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_parquet_ParquetWriter = 0;
static PyTypeObject *__pyx_ptype___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py = 0;
static PyObject *__pyx_f_7pyarrow_8_parquet_wrap_logical_type(std::shared_ptr< parquet::LogicalType const >  const &); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_raw_min( parquet::Statistics *); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_raw_max( parquet::Statistics *); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_min( parquet::Statistics *); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_max( parquet::Statistics *); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet__box_logical_type_value(PyObject *,  parquet::ColumnDescriptor const *); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet__box_byte_array( parquet::ByteArray); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet__box_flba( parquet::FLBA, uint32_t); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_physical_type_name_from_enum(enum  parquet::Type::type); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_logical_type_name_from_enum(enum  parquet::LogicalType::Type::type); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_converted_type_name_from_enum(enum  parquet::ConvertedType::type); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_encoding_name_from_enum(enum  parquet::Encoding::type); /*proto*/
static PyObject *__pyx_f_7pyarrow_8_parquet_compression_name_from_enum(enum  parquet::Compression::type); /*proto*/
static int __pyx_f_7pyarrow_8_parquet_check_compression_name(PyObject *); /*proto*/
static enum  parquet::Compression::type __pyx_f_7pyarrow_8_parquet_compression_from_name(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyObject_string_to_py_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyUnicode_string_to_py_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyStr_string_to_py_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyBytes_string_to_py_std__in_string(std::string const &); /*proto*/
static CYTHON_INLINE PyObject *__pyx_convert_PyByteArray_string_to_py_std__in_string(std::string const &); /*proto*/
static PyObject *__Pyx_CFunc_object____ParquetEncoding___to_py(PyObject *(*)(enum  parquet::Encoding::type)); /*proto*/
static PyObject *__pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type(const std::vector<enum  parquet::Encoding::type>  &); /*proto*/
static PyObject *__pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string(std::unordered_map<std::string,std::string>  const &); /*proto*/
static std::string __pyx_convert_string_from_py_std__in_string(PyObject *); /*proto*/
#define __Pyx_MODULE_NAME "pyarrow._parquet"
extern int __pyx_module_is_main_pyarrow___parquet;
int __pyx_module_is_main_pyarrow___parquet = 0;

/* Implementation of 'pyarrow._parquet' */
static PyObject *__pyx_builtin_object;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_NotImplemented;
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_map;
static PyObject *__pyx_builtin_NotImplementedError;
static PyObject *__pyx_builtin_IndexError;
static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_RuntimeError;
static const char __pyx_k_0[] = " {0}";
static const char __pyx_k_i[] = "i";
static const char __pyx_k__6[] = "    ";
static const char __pyx_k_io[] = "io";
static const char __pyx_k_ms[] = "ms";
static const char __pyx_k_np[] = "np";
static const char __pyx_k_us[] = "us";
static const char __pyx_k_0_1[] = "{0}: {1}";
static const char __pyx_k_1_0[] = "1.0";
static const char __pyx_k_2_0[] = "2.0";
static const char __pyx_k_INT[] = "INT";
static const char __pyx_k_LZ4[] = "LZ4";
static const char __pyx_k_LZO[] = "LZO";
static const char __pyx_k_MAP[] = "MAP";
static const char __pyx_k_RLE[] = "RLE";
static const char __pyx_k__12[] = "\n";
static const char __pyx_k_get[] = "get";
static const char __pyx_k_map[] = "map";
static const char __pyx_k_max[] = "max";
static const char __pyx_k_min[] = "min";
static const char __pyx_k_six[] = "six";
static const char __pyx_k_utc[] = "utc";
static const char __pyx_k_BSON[] = "BSON";
static const char __pyx_k_DATE[] = "DATE";
static const char __pyx_k_ENUM[] = "ENUM";
static const char __pyx_k_GZIP[] = "GZIP";
static const char __pyx_k_JSON[] = "JSON";
static const char __pyx_k_LIST[] = "LIST";
static const char __pyx_k_NONE[] = "NONE";
static const char __pyx_k_TIME[] = "TIME";
static const char __pyx_k_UTF8[] = "UTF8";
static const char __pyx_k_UUID[] = "UUID";
static const char __pyx_k_ZSTD[] = "ZSTD";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_name[] = "name";
static const char __pyx_k_path[] = "path";
static const char __pyx_k_pytz[] = "pytz";
static const char __pyx_k_repr[] = "__repr__";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_type[] = "type";
static const char __pyx_k_utf8[] = "utf8";
static const char __pyx_k_view[] = "view";
static const char __pyx_k_warn[] = "warn";
static const char __pyx_k_wrap[] = "wrap";
static const char __pyx_k_0_1_2[] = "{0}\n{1}\n ";
static const char __pyx_k_FLOAT[] = "FLOAT";
static const char __pyx_k_INT32[] = "INT32";
static const char __pyx_k_INT64[] = "INT64";
static const char __pyx_k_INT96[] = "INT96";
static const char __pyx_k_INT_8[] = "INT_8";
static const char __pyx_k_PLAIN[] = "PLAIN";
static const char __pyx_k_index[] = "index";
static const char __pyx_k_int32[] = "int32";
static const char __pyx_k_int64[] = "int64";
static const char __pyx_k_numpy[] = "numpy";
static const char __pyx_k_range[] = "range";
static const char __pyx_k_scale[] = "scale";
static const char __pyx_k_table[] = "table";
static const char __pyx_k_upper[] = "upper";
static const char __pyx_k_where[] = "where";
static const char __pyx_k_BROTLI[] = "BROTLI";
static const char __pyx_k_DOUBLE[] = "DOUBLE";
static const char __pyx_k_INT_16[] = "INT_16";
static const char __pyx_k_INT_32[] = "INT_32";
static const char __pyx_k_SNAPPY[] = "SNAPPY";
static const char __pyx_k_STRING[] = "STRING";
static const char __pyx_k_UINT_8[] = "UINT_8";
static const char __pyx_k_buffer[] = "buffer";
static const char __pyx_k_column[] = "column";
static const char __pyx_k_decode[] = "decode";
static const char __pyx_k_equals[] = "equals";
static const char __pyx_k_format[] = "format";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_indent[] = "indent";
static const char __pyx_k_length[] = "length";
static const char __pyx_k_name_2[] = "__name__";
static const char __pyx_k_object[] = "object";
static const char __pyx_k_parent[] = "parent";
static const char __pyx_k_reduce[] = "__reduce__";
static const char __pyx_k_schema[] = "schema";
static const char __pyx_k_source[] = "source";
static const char __pyx_k_uint32[] = "uint32";
static const char __pyx_k_uint64[] = "uint64";
static const char __pyx_k_BOOLEAN[] = "BOOLEAN";
static const char __pyx_k_DECIMAL[] = "DECIMAL";
static const char __pyx_k_UINT_16[] = "UINT_16";
static const char __pyx_k_UINT_32[] = "UINT_32";
static const char __pyx_k_UINT_64[] = "UINT_64";
static const char __pyx_k_UNKNOWN[] = "UNKNOWN";
static const char __pyx_k_columns[] = "columns";
static const char __pyx_k_to_dict[] = "to_dict";
static const char __pyx_k_tobytes[] = "tobytes";
static const char __pyx_k_version[] = "version";
static const char __pyx_k_INTERVAL[] = "INTERVAL";
static const char __pyx_k_encoding[] = "encoding_";
static const char __pyx_k_getstate[] = "__getstate__";
static const char __pyx_k_getvalue[] = "getvalue";
static const char __pyx_k_metadata[] = "metadata";
static const char __pyx_k_num_rows[] = "num_rows";
static const char __pyx_k_setstate[] = "__setstate__";
static const char __pyx_k_warnings[] = "warnings";
static const char __pyx_k_TIMESTAMP[] = "TIMESTAMP";
static const char __pyx_k_TypeError[] = "TypeError";
static const char __pyx_k_container[] = "container";
static const char __pyx_k_encodings[] = "encodings";
static const char __pyx_k_file_path[] = "file_path";
static const char __pyx_k_frombytes[] = "frombytes";
static const char __pyx_k_iteritems[] = "iteritems";
static const char __pyx_k_precision[] = "precision";
static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
static const char __pyx_k_row_group[] = "row_group";
static const char __pyx_k_BIT_PACKED[] = "BIT_PACKED";
static const char __pyx_k_BYTE_ARRAY[] = "BYTE_ARRAY";
static const char __pyx_k_IndexError[] = "IndexError";
static const char __pyx_k_NativeFile[] = "NativeFile";
static const char __pyx_k_Statistics[] = "Statistics";
static const char __pyx_k_ValueError[] = "ValueError";
static const char __pyx_k_batch_size[] = "batch_size";
static const char __pyx_k_created_by[] = "created_by";
static const char __pyx_k_null_count[] = "null_count";
static const char __pyx_k_num_values[] = "num_values";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_row_groups[] = "row_groups";
static const char __pyx_k_serialized[] = "serialized";
static const char __pyx_k_statistics[] = "statistics";
static const char __pyx_k_DECIMAL_0_1[] = "DECIMAL({0}, {1})";
static const char __pyx_k_TIME_MICROS[] = "TIME_MICROS";
static const char __pyx_k_TIME_MILLIS[] = "TIME_MILLIS";
static const char __pyx_k_buffer_size[] = "buffer_size";
static const char __pyx_k_cfunc_to_py[] = "cfunc.to_py";
static const char __pyx_k_compression[] = "compression";
static const char __pyx_k_file_offset[] = "file_offset";
static const char __pyx_k_has_min_max[] = "has_min_max";
static const char __pyx_k_memory_pool[] = "memory_pool";
static const char __pyx_k_num_columns[] = "num_columns";
static const char __pyx_k_pyarrow_lib[] = "pyarrow.lib";
static const char __pyx_k_use_threads[] = "use_threads";
static const char __pyx_k_ColumnSchema[] = "ColumnSchema";
static const char __pyx_k_FileMetaData[] = "FileMetaData";
static const char __pyx_k_RuntimeError[] = "RuntimeError";
static const char __pyx_k_UNCOMPRESSED[] = "UNCOMPRESSED";
static const char __pyx_k_is_stats_set[] = "is_stats_set";
static const char __pyx_k_logical_type[] = "logical_type";
static const char __pyx_k_metadata_len[] = "metadata_len";
static const char __pyx_k_pyarrow_util[] = "pyarrow.util";
static const char __pyx_k_stringsource[] = "stringsource";
static const char __pyx_k_MAP_KEY_VALUE[] = "MAP_KEY_VALUE";
static const char __pyx_k_ParquetReader[] = "ParquetReader";
static const char __pyx_k_ParquetSchema[] = "ParquetSchema";
static const char __pyx_k_ParquetWriter[] = "ParquetWriter";
static const char __pyx_k_physical_type[] = "physical_type";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_ArrowException[] = "ArrowException";
static const char __pyx_k_NotImplemented[] = "NotImplemented";
static const char __pyx_k_RLE_DICTIONARY[] = "RLE_DICTIONARY";
static const char __pyx_k_box_time_micro[] = "_box_time_micro";
static const char __pyx_k_box_time_milli[] = "_box_time_milli";
static const char __pyx_k_column_indices[] = "column_indices";
static const char __pyx_k_converted_type[] = "converted_type";
static const char __pyx_k_data_page_size[] = "data_page_size";
static const char __pyx_k_distinct_count[] = "distinct_count";
static const char __pyx_k_format_version[] = "format_version";
static const char __pyx_k_num_row_groups[] = "num_row_groups";
static const char __pyx_k_path_in_schema[] = "path_in_schema";
static const char __pyx_k_pyarrow_compat[] = "pyarrow.compat";
static const char __pyx_k_row_group_size[] = "row_group_size";
static const char __pyx_k_stringify_path[] = "_stringify_path";
static const char __pyx_k_use_dictionary[] = "use_dictionary";
static const char __pyx_k_use_memory_map[] = "use_memory_map";
static const char __pyx_k_0_out_of_bounds[] = "{0} out of bounds";
static const char __pyx_k_column_name_idx[] = "column_name_idx";
static const char __pyx_k_read_dictionary[] = "read_dictionary";
static const char __pyx_k_read_row_groups[] = "read_row_groups";
static const char __pyx_k_serialized_size[] = "serialized_size";
static const char __pyx_k_set_use_threads[] = "set_use_threads";
static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
static const char __pyx_k_total_byte_size[] = "total_byte_size";
static const char __pyx_k_DELTA_BYTE_ARRAY[] = "DELTA_BYTE_ARRAY";
static const char __pyx_k_PLAIN_DICTIONARY[] = "PLAIN_DICTIONARY";
static const char __pyx_k_RowGroupMetaData[] = "RowGroupMetaData";
static const char __pyx_k_TIMESTAMP_MICROS[] = "TIMESTAMP_MICROS";
static const char __pyx_k_TIMESTAMP_MILLIS[] = "TIMESTAMP_MILLIS";
static const char __pyx_k_data_page_offset[] = "data_page_offset";
static const char __pyx_k_pyarrow__parquet[] = "pyarrow._parquet";
static const char __pyx_k_write_statistics[] = "write_statistics";
static const char __pyx_k_coerce_timestamps[] = "coerce_timestamps";
static const char __pyx_k_compression_level[] = "compression_level";
static const char __pyx_k_BufferOutputStream[] = "BufferOutputStream";
static const char __pyx_k_ParquetLogicalType[] = "ParquetLogicalType";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_ColumnChunkMetaData[] = "ColumnChunkMetaData";
static const char __pyx_k_DELTA_BINARY_PACKED[] = "DELTA_BINARY_PACKED";
static const char __pyx_k_NotImplementedError[] = "NotImplementedError";
static const char __pyx_k_has_dictionary_page[] = "has_dictionary_page";
static const char __pyx_k_FIXED_LEN_BYTE_ARRAY[] = "FIXED_LEN_BYTE_ARRAY";
static const char __pyx_k_max_definition_level[] = "max_definition_level";
static const char __pyx_k_max_repetition_level[] = "max_repetition_level";
static const char __pyx_k_pyarrow__parquet_pyx[] = "pyarrow/_parquet.pyx";
static const char __pyx_k_Unsupported_time_unit[] = "Unsupported time unit";
static const char __pyx_k_total_compressed_size[] = "total_compressed_size";
static const char __pyx_k_dictionary_page_offset[] = "dictionary_page_offset";
static const char __pyx_k_DELTA_LENGTH_BYTE_ARRAY[] = "DELTA_LENGTH_BYTE_ARRAY";
static const char __pyx_k_Unsupported_compression[] = "Unsupported compression: ";
static const char __pyx_k_total_uncompressed_size[] = "total_uncompressed_size";
static const char __pyx_k_reconstruct_filemetadata[] = "_reconstruct_filemetadata";
static const char __pyx_k_Row_group_size_cannot_be_0[] = "Row group size cannot be 0";
static const char __pyx_k_allow_truncated_timestamps[] = "allow_truncated_timestamps";
static const char __pyx_k_not_supported_in_parquet_cpp[] = "not supported in parquet-cpp";
static const char __pyx_k_FIXED_LEN_BYTE_ARRAY_length_0[] = "FIXED_LEN_BYTE_ARRAY(length={0})";
static const char __pyx_k_datetime_conversion_functions[] = "_datetime_conversion_functions";
static const char __pyx_k_Pyx_CFunc_object____ParquetEnc[] = "__Pyx_CFunc_object____ParquetEncoding___to_py.<locals>.wrap";
static const char __pyx_k_has_min_max_min_max_null_count[] = "{}\n  has_min_max: {}\n  min: {}\n  max: {}\n  null_count: {}\n  distinct_count: {}\n  num_values: {}\n  physical_type: {}\n  logical_type: {}\n  converted_type (legacy): {}";
static const char __pyx_k_0_created_by_1_num_columns_2_nu[] = "{0}\n  created_by: {1}\n  num_columns: {2}\n  num_rows: {3}\n  num_row_groups: {4}\n  format_version: {5}\n  serialized_size: {6}";
static const char __pyx_k_0_file_offset_1_file_path_2_phy[] = "{0}\n  file_offset: {1}\n  file_path: {2}\n  physical_type: {3}\n  num_values: {4}\n  path_in_schema: {5}\n  is_stats_set: {6}\n  statistics:\n{7}\n  compression: {8}\n  encodings: {9}\n  has_dictionary_page: {10}\n  dictionary_page_offset: {11}\n  data_page_offset: {12}\n  total_compressed_size: {13}\n  total_uncompressed_size: {14}";
static const char __pyx_k_0_num_columns_1_num_rows_2_tota[] = "{0}\n  num_columns: {1}\n  num_rows: {2}\n  total_byte_size: {3}";
static const char __pyx_k_Buffer_size_must_be_larger_than[] = "Buffer size must be larger than zero";
static const char __pyx_k_ParquetColumnSchema_name_0_path[] = "<ParquetColumnSchema>\n  name: {0}\n  path: {1}\n  max_definition_level: {2}\n  max_repetition_level: {3}\n  physical_type: {4}\n  logical_type: {5}\n  converted_type (legacy): {6}";
static const char __pyx_k_file_metadata_is_only_available[] = "file metadata is only available after writer close";
static const char __pyx_k_use_deprecated_int96_timestamps[] = "use_deprecated_int96_timestamps";
static const char __pyx_k_Invalid_value_for_coerce_timesta[] = "Invalid value for coerce_timestamps: {0}";
static const char __pyx_k_Unrecognized_file_version_assumi[] = "Unrecognized file version, assuming 1.0: {}";
static const char __pyx_k_Unsupported_Parquet_format_versi[] = "Unsupported Parquet format version";
static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
static const char __pyx_k_parquet_cpp_doesn_t_return_valid[] = "parquet-cpp doesn't return valid values";
static PyObject *__pyx_kp_u_0;
static PyObject *__pyx_kp_u_0_1;
static PyObject *__pyx_kp_u_0_1_2;
static PyObject *__pyx_kp_u_0_created_by_1_num_columns_2_nu;
static PyObject *__pyx_kp_u_0_file_offset_1_file_path_2_phy;
static PyObject *__pyx_kp_u_0_num_columns_1_num_rows_2_tota;
static PyObject *__pyx_kp_u_0_out_of_bounds;
static PyObject *__pyx_kp_u_1_0;
static PyObject *__pyx_kp_u_2_0;
static PyObject *__pyx_n_s_ArrowException;
static PyObject *__pyx_n_u_BIT_PACKED;
static PyObject *__pyx_n_u_BOOLEAN;
static PyObject *__pyx_n_u_BROTLI;
static PyObject *__pyx_n_u_BSON;
static PyObject *__pyx_n_u_BYTE_ARRAY;
static PyObject *__pyx_n_s_BufferOutputStream;
static PyObject *__pyx_kp_u_Buffer_size_must_be_larger_than;
static PyObject *__pyx_n_s_ColumnChunkMetaData;
static PyObject *__pyx_n_s_ColumnSchema;
static PyObject *__pyx_n_u_DATE;
static PyObject *__pyx_n_u_DECIMAL;
static PyObject *__pyx_kp_u_DECIMAL_0_1;
static PyObject *__pyx_n_u_DELTA_BINARY_PACKED;
static PyObject *__pyx_n_u_DELTA_BYTE_ARRAY;
static PyObject *__pyx_n_u_DELTA_LENGTH_BYTE_ARRAY;
static PyObject *__pyx_n_u_DOUBLE;
static PyObject *__pyx_n_u_ENUM;
static PyObject *__pyx_n_u_FIXED_LEN_BYTE_ARRAY;
static PyObject *__pyx_kp_u_FIXED_LEN_BYTE_ARRAY_length_0;
static PyObject *__pyx_n_u_FLOAT;
static PyObject *__pyx_n_s_FileMetaData;
static PyObject *__pyx_n_u_GZIP;
static PyObject *__pyx_n_u_INT;
static PyObject *__pyx_n_u_INT32;
static PyObject *__pyx_n_u_INT64;
static PyObject *__pyx_n_u_INT96;
static PyObject *__pyx_n_u_INTERVAL;
static PyObject *__pyx_n_u_INT_16;
static PyObject *__pyx_n_u_INT_32;
static PyObject *__pyx_n_u_INT_8;
static PyObject *__pyx_n_s_IndexError;
static PyObject *__pyx_kp_u_Invalid_value_for_coerce_timesta;
static PyObject *__pyx_n_u_JSON;
static PyObject *__pyx_n_u_LIST;
static PyObject *__pyx_n_u_LZ4;
static PyObject *__pyx_n_u_LZO;
static PyObject *__pyx_n_u_MAP;
static PyObject *__pyx_n_u_MAP_KEY_VALUE;
static PyObject *__pyx_n_u_NONE;
static PyObject *__pyx_n_s_NativeFile;
static PyObject *__pyx_n_s_NotImplemented;
static PyObject *__pyx_n_s_NotImplementedError;
static PyObject *__pyx_n_u_PLAIN;
static PyObject *__pyx_n_u_PLAIN_DICTIONARY;
static PyObject *__pyx_kp_u_ParquetColumnSchema_name_0_path;
static PyObject *__pyx_n_s_ParquetLogicalType;
static PyObject *__pyx_n_s_ParquetReader;
static PyObject *__pyx_n_s_ParquetSchema;
static PyObject *__pyx_n_s_ParquetWriter;
static PyObject *__pyx_n_s_Pyx_CFunc_object____ParquetEnc;
static PyObject *__pyx_n_u_RLE;
static PyObject *__pyx_n_u_RLE_DICTIONARY;
static PyObject *__pyx_n_s_RowGroupMetaData;
static PyObject *__pyx_kp_u_Row_group_size_cannot_be_0;
static PyObject *__pyx_n_s_RuntimeError;
static PyObject *__pyx_n_u_SNAPPY;
static PyObject *__pyx_n_u_STRING;
static PyObject *__pyx_n_s_Statistics;
static PyObject *__pyx_n_u_TIME;
static PyObject *__pyx_n_u_TIMESTAMP;
static PyObject *__pyx_n_u_TIMESTAMP_MICROS;
static PyObject *__pyx_n_u_TIMESTAMP_MILLIS;
static PyObject *__pyx_n_u_TIME_MICROS;
static PyObject *__pyx_n_u_TIME_MILLIS;
static PyObject *__pyx_n_s_TypeError;
static PyObject *__pyx_n_u_UINT_16;
static PyObject *__pyx_n_u_UINT_32;
static PyObject *__pyx_n_u_UINT_64;
static PyObject *__pyx_n_u_UINT_8;
static PyObject *__pyx_n_u_UNCOMPRESSED;
static PyObject *__pyx_n_u_UNKNOWN;
static PyObject *__pyx_n_u_UTF8;
static PyObject *__pyx_n_u_UUID;
static PyObject *__pyx_kp_u_Unrecognized_file_version_assumi;
static PyObject *__pyx_kp_u_Unsupported_Parquet_format_versi;
static PyObject *__pyx_kp_u_Unsupported_compression;
static PyObject *__pyx_kp_u_Unsupported_time_unit;
static PyObject *__pyx_n_s_ValueError;
static PyObject *__pyx_n_u_ZSTD;
static PyObject *__pyx_kp_u__12;
static PyObject *__pyx_kp_u__6;
static PyObject *__pyx_n_s_allow_truncated_timestamps;
static PyObject *__pyx_n_s_batch_size;
static PyObject *__pyx_n_s_box_time_micro;
static PyObject *__pyx_n_s_box_time_milli;
static PyObject *__pyx_n_s_buffer;
static PyObject *__pyx_n_s_buffer_size;
static PyObject *__pyx_n_s_cfunc_to_py;
static PyObject *__pyx_n_s_cline_in_traceback;
static PyObject *__pyx_n_s_coerce_timestamps;
static PyObject *__pyx_n_s_column;
static PyObject *__pyx_n_s_column_indices;
static PyObject *__pyx_n_s_column_name_idx;
static PyObject *__pyx_n_s_columns;
static PyObject *__pyx_n_s_compression;
static PyObject *__pyx_n_s_compression_level;
static PyObject *__pyx_n_s_container;
static PyObject *__pyx_n_s_converted_type;
static PyObject *__pyx_n_s_created_by;
static PyObject *__pyx_n_u_created_by;
static PyObject *__pyx_n_s_data_page_offset;
static PyObject *__pyx_n_s_data_page_size;
static PyObject *__pyx_n_s_datetime_conversion_functions;
static PyObject *__pyx_n_s_decode;
static PyObject *__pyx_n_s_dictionary_page_offset;
static PyObject *__pyx_n_s_distinct_count;
static PyObject *__pyx_n_s_encoding;
static PyObject *__pyx_n_s_encodings;
static PyObject *__pyx_n_s_equals;
static PyObject *__pyx_kp_u_file_metadata_is_only_available;
static PyObject *__pyx_n_s_file_offset;
static PyObject *__pyx_n_s_file_path;
static PyObject *__pyx_n_s_format;
static PyObject *__pyx_n_s_format_version;
static PyObject *__pyx_n_u_format_version;
static PyObject *__pyx_n_s_frombytes;
static PyObject *__pyx_n_s_get;
static PyObject *__pyx_n_s_getstate;
static PyObject *__pyx_n_s_getvalue;
static PyObject *__pyx_n_s_has_dictionary_page;
static PyObject *__pyx_n_s_has_min_max;
static PyObject *__pyx_kp_u_has_min_max_min_max_null_count;
static PyObject *__pyx_n_s_i;
static PyObject *__pyx_n_s_import;
static PyObject *__pyx_n_s_indent;
static PyObject *__pyx_n_s_index;
static PyObject *__pyx_n_s_int32;
static PyObject *__pyx_n_s_int64;
static PyObject *__pyx_n_s_io;
static PyObject *__pyx_n_s_is_stats_set;
static PyObject *__pyx_n_s_iteritems;
static PyObject *__pyx_n_s_length;
static PyObject *__pyx_n_s_logical_type;
static PyObject *__pyx_n_s_main;
static PyObject *__pyx_n_s_map;
static PyObject *__pyx_n_s_max;
static PyObject *__pyx_n_s_max_definition_level;
static PyObject *__pyx_n_s_max_repetition_level;
static PyObject *__pyx_n_s_memory_pool;
static PyObject *__pyx_n_s_metadata;
static PyObject *__pyx_n_u_metadata;
static PyObject *__pyx_n_s_metadata_len;
static PyObject *__pyx_n_s_min;
static PyObject *__pyx_n_u_ms;
static PyObject *__pyx_n_s_name;
static PyObject *__pyx_n_s_name_2;
static PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
static PyObject *__pyx_kp_u_not_supported_in_parquet_cpp;
static PyObject *__pyx_n_s_np;
static PyObject *__pyx_n_s_null_count;
static PyObject *__pyx_n_s_num_columns;
static PyObject *__pyx_n_u_num_columns;
static PyObject *__pyx_n_s_num_row_groups;
static PyObject *__pyx_n_u_num_row_groups;
static PyObject *__pyx_n_s_num_rows;
static PyObject *__pyx_n_u_num_rows;
static PyObject *__pyx_n_s_num_values;
static PyObject *__pyx_n_s_numpy;
static PyObject *__pyx_n_s_object;
static PyObject *__pyx_n_s_parent;
static PyObject *__pyx_kp_u_parquet_cpp_doesn_t_return_valid;
static PyObject *__pyx_n_s_path;
static PyObject *__pyx_n_s_path_in_schema;
static PyObject *__pyx_n_s_physical_type;
static PyObject *__pyx_n_s_precision;
static PyObject *__pyx_n_s_pyarrow__parquet;
static PyObject *__pyx_kp_s_pyarrow__parquet_pyx;
static PyObject *__pyx_n_s_pyarrow_compat;
static PyObject *__pyx_n_s_pyarrow_lib;
static PyObject *__pyx_n_s_pyarrow_util;
static PyObject *__pyx_n_s_pytz;
static PyObject *__pyx_n_s_pyx_vtable;
static PyObject *__pyx_n_s_range;
static PyObject *__pyx_n_s_read_dictionary;
static PyObject *__pyx_n_s_read_row_groups;
static PyObject *__pyx_n_s_reconstruct_filemetadata;
static PyObject *__pyx_n_s_reduce;
static PyObject *__pyx_n_s_reduce_cython;
static PyObject *__pyx_n_s_reduce_ex;
static PyObject *__pyx_n_s_repr;
static PyObject *__pyx_n_s_row_group;
static PyObject *__pyx_n_s_row_group_size;
static PyObject *__pyx_n_s_row_groups;
static PyObject *__pyx_n_s_scale;
static PyObject *__pyx_n_s_schema;
static PyObject *__pyx_n_u_schema;
static PyObject *__pyx_n_s_serialized;
static PyObject *__pyx_n_s_serialized_size;
static PyObject *__pyx_n_u_serialized_size;
static PyObject *__pyx_n_s_set_use_threads;
static PyObject *__pyx_n_s_setstate;
static PyObject *__pyx_n_s_setstate_cython;
static PyObject *__pyx_n_s_six;
static PyObject *__pyx_n_s_source;
static PyObject *__pyx_n_s_statistics;
static PyObject *__pyx_n_s_stringify_path;
static PyObject *__pyx_kp_s_stringsource;
static PyObject *__pyx_n_s_table;
static PyObject *__pyx_n_s_test;
static PyObject *__pyx_n_s_to_dict;
static PyObject *__pyx_n_s_tobytes;
static PyObject *__pyx_n_s_total_byte_size;
static PyObject *__pyx_n_s_total_compressed_size;
static PyObject *__pyx_n_s_total_uncompressed_size;
static PyObject *__pyx_n_s_type;
static PyObject *__pyx_n_s_uint32;
static PyObject *__pyx_n_s_uint64;
static PyObject *__pyx_n_s_upper;
static PyObject *__pyx_n_u_us;
static PyObject *__pyx_n_s_use_deprecated_int96_timestamps;
static PyObject *__pyx_n_s_use_dictionary;
static PyObject *__pyx_n_s_use_memory_map;
static PyObject *__pyx_n_s_use_threads;
static PyObject *__pyx_n_s_utc;
static PyObject *__pyx_n_u_utf8;
static PyObject *__pyx_n_s_version;
static PyObject *__pyx_n_s_view;
static PyObject *__pyx_n_s_warn;
static PyObject *__pyx_n_s_warnings;
static PyObject *__pyx_n_s_where;
static PyObject *__pyx_n_s_wrap;
static PyObject *__pyx_n_s_write_statistics;
static int __pyx_pf_7pyarrow_8_parquet_10Statistics___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_2__repr__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_4to_dict(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_6__eq__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_8equals(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_11has_min_max___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_7min_raw___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_7max_raw___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_3min___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_3max___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_10null_count___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_14distinct_count___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_10num_values___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_13physical_type___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_12logical_type___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_14converted_type___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_2__str__(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_4to_json(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_4type___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_2__repr__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_4to_dict(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_6__eq__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_8equals(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_11file_offset___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_9file_path___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_13physical_type___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10num_values___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_14path_in_schema___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_12is_stats_set___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10statistics___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_11compression___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_9encodings___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_19has_dictionary_page___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_22dictionary_page_offset___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_16data_page_offset___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_14has_index_page___get__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_17index_page_offset___get__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_21total_compressed_size___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_23total_uncompressed_size___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData___cinit__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_parent, int __pyx_v_index); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_2__reduce__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_4__eq__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_6equals(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_8column(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, int __pyx_v_i); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_10__repr__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_12to_dict(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_11num_columns___get__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_8num_rows___get__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_15total_byte_size___get__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet__reconstruct_filemetadata(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7pyarrow_3lib_Buffer *__pyx_v_serialized); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_12FileMetaData___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_2__reduce__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_4__repr__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_6to_dict(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_8__eq__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_10equals(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_6schema___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_15serialized_size___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_11num_columns___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_8num_rows___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_14num_row_groups___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_14format_version___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_10created_by___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_8metadata___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_12row_group(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, int __pyx_v_i); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_14set_file_path(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, PyObject *__pyx_v_path); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_16append_row_groups(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_18write_metadata_file(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, PyObject *__pyx_v_where); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_13ParquetSchema___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_container); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_2__repr__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_4__reduce__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_6__len__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_8__getitem__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_5names___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_10to_arrow_schema(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_12__eq__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_14equals(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_16column(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, PyObject *__pyx_v_i); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_12ColumnSchema___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_schema, int __pyx_v_index); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_2__eq__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4__reduce__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_6equals(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_8__repr__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4name___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4path___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_20max_definition_level___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_20max_repetition_level___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_13physical_type___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_12logical_type___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_14converted_type___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_6length___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_9precision___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_5scale___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_13ParquetReader___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_2open(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_source, int __pyx_v_use_memory_map, PyObject *__pyx_v_read_dictionary, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_metadata, int __pyx_v_buffer_size); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_12column_paths___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_8metadata___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_14num_row_groups___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_4set_use_threads(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_use_threads); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_6read_row_group(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_column_indices, int __pyx_v_use_threads); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_8read_row_groups(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_row_groups, PyObject *__pyx_v_column_indices, int __pyx_v_use_threads); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_10read_all(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_column_indices, int __pyx_v_use_threads); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_12scan_contents(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_column_indices, PyObject *__pyx_v_batch_size); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_14column_name_idx(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_column_name); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_16read_column(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_column_index); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_18read_schema_field(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_field_index); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_2__set__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_4__del__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_parquet_13ParquetWriter___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, PyObject *__pyx_v_where, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema, PyObject *__pyx_v_use_dictionary, PyObject *__pyx_v_compression, PyObject *__pyx_v_version, PyObject *__pyx_v_write_statistics, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool, PyObject *__pyx_v_use_deprecated_int96_timestamps, PyObject *__pyx_v_coerce_timestamps, PyObject *__pyx_v_data_page_size, PyObject *__pyx_v_allow_truncated_timestamps, PyObject *__pyx_v_compression_level); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_2close(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_4write_table(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Table *__pyx_v_table, PyObject *__pyx_v_row_group_size); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_8metadata___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14use_dictionary___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_31use_deprecated_int96_timestamps___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_17coerce_timestamps___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_26allow_truncated_timestamps___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_11compression___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_17compression_level___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_7version___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_16write_statistics___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14row_group_size___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14data_page_size___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_wrap(PyObject *__pyx_self, enum  parquet::Encoding::type __pyx_v_encoding_); /* proto */
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_Statistics(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ParquetLogicalType(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ColumnChunkMetaData(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_RowGroupMetaData(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_FileMetaData(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ParquetSchema(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ColumnSchema(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ParquetReader(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ParquetWriter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_get = {0, &__pyx_n_s_get, 0, 0, 0};
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_65536;
static PyObject *__pyx_int_neg_1;
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__7;
static PyObject *__pyx_tuple__8;
static PyObject *__pyx_tuple__9;
static PyObject *__pyx_tuple__10;
static PyObject *__pyx_tuple__11;
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__22;
static PyObject *__pyx_codeobj__21;
static PyObject *__pyx_codeobj__23;
/* Late includes */

/* "pyarrow/_parquet.pyx":59
 *         ColumnChunkMetaData parent
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_10Statistics_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_10Statistics_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_7pyarrow_8_parquet_10Statistics___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static int __pyx_pf_7pyarrow_8_parquet_10Statistics___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

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

/* "pyarrow/_parquet.pyx":62
 *         pass
 * 
 *     cdef init(self, const shared_ptr[CStatistics]& statistics,             # <<<<<<<<<<<<<<
 *               ColumnChunkMetaData parent):
 *         self.statistics = statistics
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_10Statistics_init(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, std::shared_ptr< parquet::Statistics>  const &__pyx_v_statistics, struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_parent) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_parquet.pyx":64
 *     cdef init(self, const shared_ptr[CStatistics]& statistics,
 *               ColumnChunkMetaData parent):
 *         self.statistics = statistics             # <<<<<<<<<<<<<<
 *         self.parent = parent
 * 
 */
  __pyx_v_self->statistics = __pyx_v_statistics;

  /* "pyarrow/_parquet.pyx":65
 *               ColumnChunkMetaData parent):
 *         self.statistics = statistics
 *         self.parent = parent             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_parent));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_parent));
  __Pyx_GOTREF(__pyx_v_self->parent);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->parent));
  __pyx_v_self->parent = __pyx_v_parent;

  /* "pyarrow/_parquet.pyx":62
 *         pass
 * 
 *     cdef init(self, const shared_ptr[CStatistics]& statistics,             # <<<<<<<<<<<<<<
 *               ColumnChunkMetaData parent):
 *         self.statistics = statistics
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":67
 *         self.parent = parent
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return """{}
 *   has_min_max: {}
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_3__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_2__repr__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_2__repr__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  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;
  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("__repr__", 0);

  /* "pyarrow/_parquet.pyx":68
 * 
 *     def __repr__(self):
 *         return """{}             # <<<<<<<<<<<<<<
 *   has_min_max: {}
 *   min: {}
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":77
 *   physical_type: {}
 *   logical_type: {}
 *   converted_type (legacy): {}""".format(object.__repr__(self),             # <<<<<<<<<<<<<<
 *                                         self.has_min_max,
 *                                         self.min,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_has_min_max_min_max_null_count, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_n_s_repr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 77, __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_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self));
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":78
 *   logical_type: {}
 *   converted_type (legacy): {}""".format(object.__repr__(self),
 *                                         self.has_min_max,             # <<<<<<<<<<<<<<
 *                                         self.min,
 *                                         self.max,
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "pyarrow/_parquet.pyx":79
 *   converted_type (legacy): {}""".format(object.__repr__(self),
 *                                         self.has_min_max,
 *                                         self.min,             # <<<<<<<<<<<<<<
 *                                         self.max,
 *                                         self.null_count,
 */
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_min); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pyarrow/_parquet.pyx":80
 *                                         self.has_min_max,
 *                                         self.min,
 *                                         self.max,             # <<<<<<<<<<<<<<
 *                                         self.null_count,
 *                                         self.distinct_count,
 */
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_max); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "pyarrow/_parquet.pyx":81
 *                                         self.min,
 *                                         self.max,
 *                                         self.null_count,             # <<<<<<<<<<<<<<
 *                                         self.distinct_count,
 *                                         self.num_values,
 */
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_null_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "pyarrow/_parquet.pyx":82
 *                                         self.max,
 *                                         self.null_count,
 *                                         self.distinct_count,             # <<<<<<<<<<<<<<
 *                                         self.num_values,
 *                                         self.physical_type,
 */
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_distinct_count); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "pyarrow/_parquet.pyx":83
 *                                         self.null_count,
 *                                         self.distinct_count,
 *                                         self.num_values,             # <<<<<<<<<<<<<<
 *                                         self.physical_type,
 *                                         str(self.logical_type),
 */
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_values); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);

  /* "pyarrow/_parquet.pyx":84
 *                                         self.distinct_count,
 *                                         self.num_values,
 *                                         self.physical_type,             # <<<<<<<<<<<<<<
 *                                         str(self.logical_type),
 *                                         self.converted_type)
 */
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);

  /* "pyarrow/_parquet.pyx":85
 *                                         self.num_values,
 *                                         self.physical_type,
 *                                         str(self.logical_type),             # <<<<<<<<<<<<<<
 *                                         self.converted_type)
 * 
 */
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logical_type); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;

  /* "pyarrow/_parquet.pyx":86
 *                                         self.physical_type,
 *                                         str(self.logical_type),
 *                                         self.converted_type)             # <<<<<<<<<<<<<<
 * 
 *     def to_dict(self):
 */
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_converted_type); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_13 = NULL;
  __pyx_t_14 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_14 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[11] = {__pyx_t_13, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_12, __pyx_t_11};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_14, 10+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[11] = {__pyx_t_13, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_12, __pyx_t_11};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_14, 10+__pyx_t_14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(10+__pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_13) {
      __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13); __pyx_t_13 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_14, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_14, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_15, 2+__pyx_t_14, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_15, 3+__pyx_t_14, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_15, 4+__pyx_t_14, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_15, 5+__pyx_t_14, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_15, 6+__pyx_t_14, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_15, 7+__pyx_t_14, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_15, 8+__pyx_t_14, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_15, 9+__pyx_t_14, __pyx_t_11);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __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_t_12 = 0;
    __pyx_t_11 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":67
 *         self.parent = parent
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return """{}
 *   has_min_max: {}
 */

  /* 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_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_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":88
 *                                         self.converted_type)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         d = dict(
 *             has_min_max=self.has_min_max,
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_5to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_10Statistics_4to_dict[] = "Statistics.to_dict(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_5to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_4to_dict(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_4to_dict(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("to_dict", 0);

  /* "pyarrow/_parquet.pyx":90
 *     def to_dict(self):
 *         d = dict(
 *             has_min_max=self.has_min_max,             # <<<<<<<<<<<<<<
 *             min=self.min,
 *             max=self.max,
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_has_min_max, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":91
 *         d = dict(
 *             has_min_max=self.has_min_max,
 *             min=self.min,             # <<<<<<<<<<<<<<
 *             max=self.max,
 *             null_count=self.null_count,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_min, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":92
 *             has_min_max=self.has_min_max,
 *             min=self.min,
 *             max=self.max,             # <<<<<<<<<<<<<<
 *             null_count=self.null_count,
 *             distinct_count=self.distinct_count,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_max, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":93
 *             min=self.min,
 *             max=self.max,
 *             null_count=self.null_count,             # <<<<<<<<<<<<<<
 *             distinct_count=self.distinct_count,
 *             num_values=self.num_values,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_null_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_null_count, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":94
 *             max=self.max,
 *             null_count=self.null_count,
 *             distinct_count=self.distinct_count,             # <<<<<<<<<<<<<<
 *             num_values=self.num_values,
 *             physical_type=self.physical_type
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_distinct_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_distinct_count, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":95
 *             null_count=self.null_count,
 *             distinct_count=self.distinct_count,
 *             num_values=self.num_values,             # <<<<<<<<<<<<<<
 *             physical_type=self.physical_type
 *         )
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_values, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":96
 *             distinct_count=self.distinct_count,
 *             num_values=self.num_values,
 *             physical_type=self.physical_type             # <<<<<<<<<<<<<<
 *         )
 *         return d
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_physical_type, __pyx_t_2) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_d = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":98
 *             physical_type=self.physical_type
 *         )
 *         return d             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_d);
  __pyx_r = __pyx_v_d;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":88
 *                                         self.converted_type)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         d = dict(
 *             has_min_max=self.has_min_max,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.to_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":100
 *         return d
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_7__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_7__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_6__eq__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_6__eq__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pyarrow/_parquet.pyx":101
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":102
 *     def __eq__(self, other):
 *         try:
 *             return self.equals(other)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_equals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 102, __pyx_L3_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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_other) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_other);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;

      /* "pyarrow/_parquet.pyx":101
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    }
    __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;

    /* "pyarrow/_parquet.pyx":103
 *         try:
 *             return self.equals(other)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 * 
 */
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyarrow._parquet.Statistics.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 103, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":104
 *             return self.equals(other)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *     def equals(self, Statistics other):
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_builtin_NotImplemented);
      __pyx_r = __pyx_builtin_NotImplemented;
      __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;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":101
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    __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_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;
  }

  /* "pyarrow/_parquet.pyx":100
 *         return d
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":106
 *             return NotImplemented
 * 
 *     def equals(self, Statistics other):             # <<<<<<<<<<<<<<
 *         # TODO(kszucs): implement native Equals method for Statistics
 *         return (self.has_min_max == other.has_min_max and
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_9equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_10Statistics_8equals[] = "Statistics.equals(self, Statistics other)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_9equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equals (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_7pyarrow_8_parquet_Statistics, 1, "other", 0))) __PYX_ERR(0, 106, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_8equals(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_8equals(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_other) {
  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;
  __Pyx_RefNannySetupContext("equals", 0);

  /* "pyarrow/_parquet.pyx":108
 *     def equals(self, Statistics other):
 *         # TODO(kszucs): implement native Equals method for Statistics
 *         return (self.has_min_max == other.has_min_max and             # <<<<<<<<<<<<<<
 *                 self.min == other.min and
 *                 self.max == other.max and
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":109
 *         # TODO(kszucs): implement native Equals method for Statistics
 *         return (self.has_min_max == other.has_min_max and
 *                 self.min == other.min and             # <<<<<<<<<<<<<<
 *                 self.max == other.max and
 *                 self.null_count == other.null_count and
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_min); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 109, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 109, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":110
 *         return (self.has_min_max == other.has_min_max and
 *                 self.min == other.min and
 *                 self.max == other.max and             # <<<<<<<<<<<<<<
 *                 self.null_count == other.null_count and
 *                 self.distinct_count == other.distinct_count and
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 110, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":111
 *                 self.min == other.min and
 *                 self.max == other.max and
 *                 self.null_count == other.null_count and             # <<<<<<<<<<<<<<
 *                 self.distinct_count == other.distinct_count and
 *                 self.num_values == other.num_values and
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_null_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_null_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 111, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":112
 *                 self.max == other.max and
 *                 self.null_count == other.null_count and
 *                 self.distinct_count == other.distinct_count and             # <<<<<<<<<<<<<<
 *                 self.num_values == other.num_values and
 *                 self.physical_type == other.physical_type)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_distinct_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_distinct_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 112, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":113
 *                 self.null_count == other.null_count and
 *                 self.distinct_count == other.distinct_count and
 *                 self.num_values == other.num_values and             # <<<<<<<<<<<<<<
 *                 self.physical_type == other.physical_type)
 * 
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_values); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_num_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 113, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":114
 *                 self.distinct_count == other.distinct_count and
 *                 self.num_values == other.num_values and
 *                 self.physical_type == other.physical_type)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_4);
  __pyx_t_1 = __pyx_t_4;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":106
 *             return NotImplemented
 * 
 *     def equals(self, Statistics other):             # <<<<<<<<<<<<<<
 *         # TODO(kszucs): implement native Equals method for Statistics
 *         return (self.has_min_max == other.has_min_max and
 */

  /* 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_AddTraceback("pyarrow._parquet.Statistics.equals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":117
 * 
 *     @property
 *     def has_min_max(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().HasMinMax()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_11has_min_max_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_11has_min_max_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_11has_min_max___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":118
 *     @property
 *     def has_min_max(self):
 *         return self.statistics.get().HasMinMax()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->statistics.get()->HasMinMax()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":117
 * 
 *     @property
 *     def has_min_max(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().HasMinMax()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.has_min_max.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":121
 * 
 *     @property
 *     def min_raw(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_raw_min(self.statistics.get())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_7min_raw_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_7min_raw_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_7min_raw___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_7min_raw___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":122
 *     @property
 *     def min_raw(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_raw_min(self.statistics.get())
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":123
 *     def min_raw(self):
 *         if self.has_min_max:
 *             return _cast_statistic_raw_min(self.statistics.get())             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__cast_statistic_raw_min(__pyx_v_self->statistics.get()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":122
 *     @property
 *     def min_raw(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_raw_min(self.statistics.get())
 *         else:
 */
  }

  /* "pyarrow/_parquet.pyx":125
 *             return _cast_statistic_raw_min(self.statistics.get())
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":121
 * 
 *     @property
 *     def min_raw(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_raw_min(self.statistics.get())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.min_raw.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":128
 * 
 *     @property
 *     def max_raw(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_raw_max(self.statistics.get())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_7max_raw_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_7max_raw_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_7max_raw___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_7max_raw___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":129
 *     @property
 *     def max_raw(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_raw_max(self.statistics.get())
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":130
 *     def max_raw(self):
 *         if self.has_min_max:
 *             return _cast_statistic_raw_max(self.statistics.get())             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__cast_statistic_raw_max(__pyx_v_self->statistics.get()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":129
 *     @property
 *     def max_raw(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_raw_max(self.statistics.get())
 *         else:
 */
  }

  /* "pyarrow/_parquet.pyx":132
 *             return _cast_statistic_raw_max(self.statistics.get())
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":128
 * 
 *     @property
 *     def max_raw(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_raw_max(self.statistics.get())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.max_raw.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":135
 * 
 *     @property
 *     def min(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_min(self.statistics.get())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_3min_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_3min_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_3min___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_3min___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":136
 *     @property
 *     def min(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_min(self.statistics.get())
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":137
 *     def min(self):
 *         if self.has_min_max:
 *             return _cast_statistic_min(self.statistics.get())             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__cast_statistic_min(__pyx_v_self->statistics.get()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":136
 *     @property
 *     def min(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_min(self.statistics.get())
 *         else:
 */
  }

  /* "pyarrow/_parquet.pyx":139
 *             return _cast_statistic_min(self.statistics.get())
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":135
 * 
 *     @property
 *     def min(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_min(self.statistics.get())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.min.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":142
 * 
 *     @property
 *     def max(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_max(self.statistics.get())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_3max_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_3max_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_3max___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_3max___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":143
 *     @property
 *     def max(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_max(self.statistics.get())
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_min_max); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":144
 *     def max(self):
 *         if self.has_min_max:
 *             return _cast_statistic_max(self.statistics.get())             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__cast_statistic_max(__pyx_v_self->statistics.get()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":143
 *     @property
 *     def max(self):
 *         if self.has_min_max:             # <<<<<<<<<<<<<<
 *             return _cast_statistic_max(self.statistics.get())
 *         else:
 */
  }

  /* "pyarrow/_parquet.pyx":146
 *             return _cast_statistic_max(self.statistics.get())
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":142
 * 
 *     @property
 *     def max(self):             # <<<<<<<<<<<<<<
 *         if self.has_min_max:
 *             return _cast_statistic_max(self.statistics.get())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.max.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":149
 * 
 *     @property
 *     def null_count(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().null_count()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_10null_count_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_10null_count_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_10null_count___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":150
 *     @property
 *     def null_count(self):
 *         return self.statistics.get().null_count()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->statistics.get()->null_count()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":149
 * 
 *     @property
 *     def null_count(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().null_count()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.null_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":153
 * 
 *     @property
 *     def distinct_count(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().distinct_count()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_14distinct_count_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_14distinct_count_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_14distinct_count___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":154
 *     @property
 *     def distinct_count(self):
 *         return self.statistics.get().distinct_count()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->statistics.get()->distinct_count()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":153
 * 
 *     @property
 *     def distinct_count(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().distinct_count()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.distinct_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":157
 * 
 *     @property
 *     def num_values(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().num_values()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_10num_values_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_10num_values_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_10num_values___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":158
 *     @property
 *     def num_values(self):
 *         return self.statistics.get().num_values()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->statistics.get()->num_values()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":157
 * 
 *     @property
 *     def num_values(self):             # <<<<<<<<<<<<<<
 *         return self.statistics.get().num_values()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.num_values.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":161
 * 
 *     @property
 *     def physical_type(self):             # <<<<<<<<<<<<<<
 *         raw_physical_type = self.statistics.get().physical_type()
 *         return physical_type_name_from_enum(raw_physical_type)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_13physical_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_13physical_type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_13physical_type___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_13physical_type___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  enum  parquet::Type::type __pyx_v_raw_physical_type;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":162
 *     @property
 *     def physical_type(self):
 *         raw_physical_type = self.statistics.get().physical_type()             # <<<<<<<<<<<<<<
 *         return physical_type_name_from_enum(raw_physical_type)
 * 
 */
  __pyx_v_raw_physical_type = __pyx_v_self->statistics.get()->physical_type();

  /* "pyarrow/_parquet.pyx":163
 *     def physical_type(self):
 *         raw_physical_type = self.statistics.get().physical_type()
 *         return physical_type_name_from_enum(raw_physical_type)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_physical_type_name_from_enum(__pyx_v_raw_physical_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":161
 * 
 *     @property
 *     def physical_type(self):             # <<<<<<<<<<<<<<
 *         raw_physical_type = self.statistics.get().physical_type()
 *         return physical_type_name_from_enum(raw_physical_type)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.physical_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":166
 * 
 *     @property
 *     def logical_type(self):             # <<<<<<<<<<<<<<
 *         return wrap_logical_type(self.statistics.get().descr().logical_type())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_12logical_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_12logical_type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_12logical_type___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":167
 *     @property
 *     def logical_type(self):
 *         return wrap_logical_type(self.statistics.get().descr().logical_type())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_wrap_logical_type(__pyx_v_self->statistics.get()->descr()->logical_type()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":166
 * 
 *     @property
 *     def logical_type(self):             # <<<<<<<<<<<<<<
 *         return wrap_logical_type(self.statistics.get().descr().logical_type())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.logical_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":170
 * 
 *     @property
 *     def converted_type(self):             # <<<<<<<<<<<<<<
 *         raw_converted_type = self.statistics.get().descr().converted_type()
 *         return converted_type_name_from_enum(raw_converted_type)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_14converted_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_14converted_type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_14converted_type___get__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_14converted_type___get__(struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  enum  parquet::ConvertedType::type __pyx_v_raw_converted_type;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":171
 *     @property
 *     def converted_type(self):
 *         raw_converted_type = self.statistics.get().descr().converted_type()             # <<<<<<<<<<<<<<
 *         return converted_type_name_from_enum(raw_converted_type)
 * 
 */
  __pyx_v_raw_converted_type = __pyx_v_self->statistics.get()->descr()->converted_type();

  /* "pyarrow/_parquet.pyx":172
 *     def converted_type(self):
 *         raw_converted_type = self.statistics.get().descr().converted_type()
 *         return converted_type_name_from_enum(raw_converted_type)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_converted_type_name_from_enum(__pyx_v_raw_converted_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":170
 * 
 *     @property
 *     def converted_type(self):             # <<<<<<<<<<<<<<
 *         raw_converted_type = self.statistics.get().descr().converted_type()
 *         return converted_type_name_from_enum(raw_converted_type)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.converted_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_10Statistics_10__reduce_cython__[] = "Statistics.__reduce_cython__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_10__reduce_cython__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __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(1, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_10Statistics_12__setstate_cython__[] = "Statistics.__setstate_cython__(self, __pyx_state)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_10Statistics_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_10Statistics_12__setstate_cython__(((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_10Statistics_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __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(1, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.Statistics.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":179
 *         shared_ptr[const CParquetLogicalType] type
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_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_7pyarrow_8_parquet_18ParquetLogicalType___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_v_self));

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

static int __pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

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

/* "pyarrow/_parquet.pyx":182
 *         pass
 * 
 *     cdef init(self, const shared_ptr[const CParquetLogicalType]& type):             # <<<<<<<<<<<<<<
 *         self.type = type
 * 
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_18ParquetLogicalType_init(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self, std::shared_ptr< parquet::LogicalType const >  const &__pyx_v_type) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_parquet.pyx":183
 * 
 *     cdef init(self, const shared_ptr[const CParquetLogicalType]& type):
 *         self.type = type             # <<<<<<<<<<<<<<
 * 
 *     def __str__(self):
 */
  __pyx_v_self->type = __pyx_v_type;

  /* "pyarrow/_parquet.pyx":182
 *         pass
 * 
 *     cdef init(self, const shared_ptr[const CParquetLogicalType]& type):             # <<<<<<<<<<<<<<
 *         self.type = type
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":185
 *         self.type = type
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.type.get().ToString())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_3__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_3__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_2__str__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_2__str__(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self) {
  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;
  __Pyx_RefNannySetupContext("__str__", 0);

  /* "pyarrow/_parquet.pyx":186
 * 
 *     def __str__(self):
 *         return frombytes(self.type.get().ToString())             # <<<<<<<<<<<<<<
 * 
 *     def to_json(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->type.get()->ToString()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_1)) __PYX_ERR(0, 186, __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;

  /* "pyarrow/_parquet.pyx":185
 *         self.type = type
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.type.get().ToString())
 * 
 */

  /* 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_AddTraceback("pyarrow._parquet.ParquetLogicalType.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":188
 *         return frombytes(self.type.get().ToString())
 * 
 *     def to_json(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.type.get().ToJSON())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_5to_json(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_18ParquetLogicalType_4to_json[] = "ParquetLogicalType.to_json(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_5to_json(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_json (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_4to_json(((struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_4to_json(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self) {
  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;
  __Pyx_RefNannySetupContext("to_json", 0);

  /* "pyarrow/_parquet.pyx":189
 * 
 *     def to_json(self):
 *         return frombytes(self.type.get().ToJSON())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->type.get()->ToJSON()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_1)) __PYX_ERR(0, 189, __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;

  /* "pyarrow/_parquet.pyx":188
 *         return frombytes(self.type.get().ToString())
 * 
 *     def to_json(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.type.get().ToJSON())
 * 
 */

  /* 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_AddTraceback("pyarrow._parquet.ParquetLogicalType.to_json", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":192
 * 
 *     @property
 *     def type(self):             # <<<<<<<<<<<<<<
 *         return logical_type_name_from_enum(self.type.get().type())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_4type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_4type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_4type___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":193
 *     @property
 *     def type(self):
 *         return logical_type_name_from_enum(self.type.get().type())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_logical_type_name_from_enum(__pyx_v_self->type.get()->type()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":192
 * 
 *     @property
 *     def type(self):             # <<<<<<<<<<<<<<
 *         return logical_type_name_from_enum(self.type.get().type())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetLogicalType.type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_18ParquetLogicalType_6__reduce_cython__[] = "ParquetLogicalType.__reduce_cython__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_6__reduce_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __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(1, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetLogicalType.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_18ParquetLogicalType_8__setstate_cython__[] = "ParquetLogicalType.__setstate_cython__(self, __pyx_state)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_8__setstate_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_18ParquetLogicalType_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __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(1, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetLogicalType.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":196
 * 
 * 
 * cdef wrap_logical_type(const shared_ptr[const CParquetLogicalType]& type):             # <<<<<<<<<<<<<<
 *     cdef ParquetLogicalType out = ParquetLogicalType()
 *     out.init(type)
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_wrap_logical_type(std::shared_ptr< parquet::LogicalType const >  const &__pyx_v_type) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *__pyx_v_out = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap_logical_type", 0);

  /* "pyarrow/_parquet.pyx":197
 * 
 * cdef wrap_logical_type(const shared_ptr[const CParquetLogicalType]& type):
 *     cdef ParquetLogicalType out = ParquetLogicalType()             # <<<<<<<<<<<<<<
 *     out.init(type)
 *     return out
 */
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ParquetLogicalType)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":198
 * cdef wrap_logical_type(const shared_ptr[const CParquetLogicalType]& type):
 *     cdef ParquetLogicalType out = ParquetLogicalType()
 *     out.init(type)             # <<<<<<<<<<<<<<
 *     return out
 * 
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetLogicalType *)__pyx_v_out->__pyx_vtab)->init(__pyx_v_out, __pyx_v_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":199
 *     cdef ParquetLogicalType out = ParquetLogicalType()
 *     out.init(type)
 *     return out             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_out));
  __pyx_r = ((PyObject *)__pyx_v_out);
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":196
 * 
 * 
 * cdef wrap_logical_type(const shared_ptr[const CParquetLogicalType]& type):             # <<<<<<<<<<<<<<
 *     cdef ParquetLogicalType out = ParquetLogicalType()
 *     out.init(type)
 */

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

/* "pyarrow/_parquet.pyx":202
 * 
 * 
 * cdef _cast_statistic_raw_min(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 */

static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_raw_min( parquet::Statistics *__pyx_v_statistics) {
  enum  parquet::Type::type __pyx_v_physical_type;
  uint32_t __pyx_v_type_length;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_cast_statistic_raw_min", 0);

  /* "pyarrow/_parquet.pyx":203
 * 
 * cdef _cast_statistic_raw_min(CStatistics* statistics):
 *     cdef ParquetType physical_type = statistics.physical_type()             # <<<<<<<<<<<<<<
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:
 */
  __pyx_v_physical_type = __pyx_v_statistics->physical_type();

  /* "pyarrow/_parquet.pyx":204
 * cdef _cast_statistic_raw_min(CStatistics* statistics):
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()             # <<<<<<<<<<<<<<
 *     if physical_type == ParquetType_BOOLEAN:
 *         return (<CBoolStatistics*> statistics).min()
 */
  __pyx_v_type_length = __pyx_v_statistics->descr()->type_length();

  /* "pyarrow/_parquet.pyx":205
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:             # <<<<<<<<<<<<<<
 *         return (<CBoolStatistics*> statistics).min()
 *     elif physical_type == ParquetType_INT32:
 */
  switch (__pyx_v_physical_type) {
    case  parquet::Type::BOOLEAN:

    /* "pyarrow/_parquet.pyx":206
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:
 *         return (<CBoolStatistics*> statistics).min()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_INT32:
 *         return (<CInt32Statistics*> statistics).min()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong((( parquet::BoolStatistics *)__pyx_v_statistics)->min()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":205
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:             # <<<<<<<<<<<<<<
 *         return (<CBoolStatistics*> statistics).min()
 *     elif physical_type == ParquetType_INT32:
 */
    break;
    case  parquet::Type::INT32:

    /* "pyarrow/_parquet.pyx":208
 *         return (<CBoolStatistics*> statistics).min()
 *     elif physical_type == ParquetType_INT32:
 *         return (<CInt32Statistics*> statistics).min()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_INT64:
 *         return (<CInt64Statistics*> statistics).min()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyInt_From_int32_t((( parquet::Int32Statistics *)__pyx_v_statistics)->min()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":207
 *     if physical_type == ParquetType_BOOLEAN:
 *         return (<CBoolStatistics*> statistics).min()
 *     elif physical_type == ParquetType_INT32:             # <<<<<<<<<<<<<<
 *         return (<CInt32Statistics*> statistics).min()
 *     elif physical_type == ParquetType_INT64:
 */
    break;
    case  parquet::Type::INT64:

    /* "pyarrow/_parquet.pyx":210
 *         return (<CInt32Statistics*> statistics).min()
 *     elif physical_type == ParquetType_INT64:
 *         return (<CInt64Statistics*> statistics).min()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_FLOAT:
 *         return (<CFloatStatistics*> statistics).min()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyInt_From_int64_t((( parquet::Int64Statistics *)__pyx_v_statistics)->min()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":209
 *     elif physical_type == ParquetType_INT32:
 *         return (<CInt32Statistics*> statistics).min()
 *     elif physical_type == ParquetType_INT64:             # <<<<<<<<<<<<<<
 *         return (<CInt64Statistics*> statistics).min()
 *     elif physical_type == ParquetType_FLOAT:
 */
    break;
    case  parquet::Type::FLOAT:

    /* "pyarrow/_parquet.pyx":212
 *         return (<CInt64Statistics*> statistics).min()
 *     elif physical_type == ParquetType_FLOAT:
 *         return (<CFloatStatistics*> statistics).min()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_DOUBLE:
 *         return (<CDoubleStatistics*> statistics).min()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyFloat_FromDouble((( parquet::FloatStatistics *)__pyx_v_statistics)->min()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":211
 *     elif physical_type == ParquetType_INT64:
 *         return (<CInt64Statistics*> statistics).min()
 *     elif physical_type == ParquetType_FLOAT:             # <<<<<<<<<<<<<<
 *         return (<CFloatStatistics*> statistics).min()
 *     elif physical_type == ParquetType_DOUBLE:
 */
    break;
    case  parquet::Type::DOUBLE:

    /* "pyarrow/_parquet.pyx":214
 *         return (<CFloatStatistics*> statistics).min()
 *     elif physical_type == ParquetType_DOUBLE:
 *         return (<CDoubleStatistics*> statistics).min()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).min())
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyFloat_FromDouble((( parquet::DoubleStatistics *)__pyx_v_statistics)->min()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":213
 *     elif physical_type == ParquetType_FLOAT:
 *         return (<CFloatStatistics*> statistics).min()
 *     elif physical_type == ParquetType_DOUBLE:             # <<<<<<<<<<<<<<
 *         return (<CDoubleStatistics*> statistics).min()
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 */
    break;
    case  parquet::Type::BYTE_ARRAY:

    /* "pyarrow/_parquet.pyx":216
 *         return (<CDoubleStatistics*> statistics).min()
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).min())             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:
 *         return _box_flba((<CFLBAStatistics*> statistics).min(), type_length)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__box_byte_array((( parquet::ByteArrayStatistics *)__pyx_v_statistics)->min()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":215
 *     elif physical_type == ParquetType_DOUBLE:
 *         return (<CDoubleStatistics*> statistics).min()
 *     elif physical_type == ParquetType_BYTE_ARRAY:             # <<<<<<<<<<<<<<
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).min())
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:
 */
    break;
    case  parquet::Type::FIXED_LEN_BYTE_ARRAY:

    /* "pyarrow/_parquet.pyx":218
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).min())
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:
 *         return _box_flba((<CFLBAStatistics*> statistics).min(), type_length)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__box_flba((( parquet::FLBAStatistics *)__pyx_v_statistics)->min(), __pyx_v_type_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":217
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).min())
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:             # <<<<<<<<<<<<<<
 *         return _box_flba((<CFLBAStatistics*> statistics).min(), type_length)
 * 
 */
    break;
    default: break;
  }

  /* "pyarrow/_parquet.pyx":202
 * 
 * 
 * cdef _cast_statistic_raw_min(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet._cast_statistic_raw_min", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":221
 * 
 * 
 * cdef _cast_statistic_raw_max(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 */

static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_raw_max( parquet::Statistics *__pyx_v_statistics) {
  enum  parquet::Type::type __pyx_v_physical_type;
  uint32_t __pyx_v_type_length;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_cast_statistic_raw_max", 0);

  /* "pyarrow/_parquet.pyx":222
 * 
 * cdef _cast_statistic_raw_max(CStatistics* statistics):
 *     cdef ParquetType physical_type = statistics.physical_type()             # <<<<<<<<<<<<<<
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:
 */
  __pyx_v_physical_type = __pyx_v_statistics->physical_type();

  /* "pyarrow/_parquet.pyx":223
 * cdef _cast_statistic_raw_max(CStatistics* statistics):
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()             # <<<<<<<<<<<<<<
 *     if physical_type == ParquetType_BOOLEAN:
 *         return (<CBoolStatistics*> statistics).max()
 */
  __pyx_v_type_length = __pyx_v_statistics->descr()->type_length();

  /* "pyarrow/_parquet.pyx":224
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:             # <<<<<<<<<<<<<<
 *         return (<CBoolStatistics*> statistics).max()
 *     elif physical_type == ParquetType_INT32:
 */
  switch (__pyx_v_physical_type) {
    case  parquet::Type::BOOLEAN:

    /* "pyarrow/_parquet.pyx":225
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:
 *         return (<CBoolStatistics*> statistics).max()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_INT32:
 *         return (<CInt32Statistics*> statistics).max()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyBool_FromLong((( parquet::BoolStatistics *)__pyx_v_statistics)->max()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":224
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 *     if physical_type == ParquetType_BOOLEAN:             # <<<<<<<<<<<<<<
 *         return (<CBoolStatistics*> statistics).max()
 *     elif physical_type == ParquetType_INT32:
 */
    break;
    case  parquet::Type::INT32:

    /* "pyarrow/_parquet.pyx":227
 *         return (<CBoolStatistics*> statistics).max()
 *     elif physical_type == ParquetType_INT32:
 *         return (<CInt32Statistics*> statistics).max()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_INT64:
 *         return (<CInt64Statistics*> statistics).max()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyInt_From_int32_t((( parquet::Int32Statistics *)__pyx_v_statistics)->max()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":226
 *     if physical_type == ParquetType_BOOLEAN:
 *         return (<CBoolStatistics*> statistics).max()
 *     elif physical_type == ParquetType_INT32:             # <<<<<<<<<<<<<<
 *         return (<CInt32Statistics*> statistics).max()
 *     elif physical_type == ParquetType_INT64:
 */
    break;
    case  parquet::Type::INT64:

    /* "pyarrow/_parquet.pyx":229
 *         return (<CInt32Statistics*> statistics).max()
 *     elif physical_type == ParquetType_INT64:
 *         return (<CInt64Statistics*> statistics).max()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_FLOAT:
 *         return (<CFloatStatistics*> statistics).max()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyInt_From_int64_t((( parquet::Int64Statistics *)__pyx_v_statistics)->max()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":228
 *     elif physical_type == ParquetType_INT32:
 *         return (<CInt32Statistics*> statistics).max()
 *     elif physical_type == ParquetType_INT64:             # <<<<<<<<<<<<<<
 *         return (<CInt64Statistics*> statistics).max()
 *     elif physical_type == ParquetType_FLOAT:
 */
    break;
    case  parquet::Type::FLOAT:

    /* "pyarrow/_parquet.pyx":231
 *         return (<CInt64Statistics*> statistics).max()
 *     elif physical_type == ParquetType_FLOAT:
 *         return (<CFloatStatistics*> statistics).max()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_DOUBLE:
 *         return (<CDoubleStatistics*> statistics).max()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyFloat_FromDouble((( parquet::FloatStatistics *)__pyx_v_statistics)->max()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":230
 *     elif physical_type == ParquetType_INT64:
 *         return (<CInt64Statistics*> statistics).max()
 *     elif physical_type == ParquetType_FLOAT:             # <<<<<<<<<<<<<<
 *         return (<CFloatStatistics*> statistics).max()
 *     elif physical_type == ParquetType_DOUBLE:
 */
    break;
    case  parquet::Type::DOUBLE:

    /* "pyarrow/_parquet.pyx":233
 *         return (<CFloatStatistics*> statistics).max()
 *     elif physical_type == ParquetType_DOUBLE:
 *         return (<CDoubleStatistics*> statistics).max()             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).max())
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyFloat_FromDouble((( parquet::DoubleStatistics *)__pyx_v_statistics)->max()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 233, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":232
 *     elif physical_type == ParquetType_FLOAT:
 *         return (<CFloatStatistics*> statistics).max()
 *     elif physical_type == ParquetType_DOUBLE:             # <<<<<<<<<<<<<<
 *         return (<CDoubleStatistics*> statistics).max()
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 */
    break;
    case  parquet::Type::BYTE_ARRAY:

    /* "pyarrow/_parquet.pyx":235
 *         return (<CDoubleStatistics*> statistics).max()
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).max())             # <<<<<<<<<<<<<<
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:
 *         return _box_flba((<CFLBAStatistics*> statistics).max(), type_length)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__box_byte_array((( parquet::ByteArrayStatistics *)__pyx_v_statistics)->max()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":234
 *     elif physical_type == ParquetType_DOUBLE:
 *         return (<CDoubleStatistics*> statistics).max()
 *     elif physical_type == ParquetType_BYTE_ARRAY:             # <<<<<<<<<<<<<<
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).max())
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:
 */
    break;
    case  parquet::Type::FIXED_LEN_BYTE_ARRAY:

    /* "pyarrow/_parquet.pyx":237
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).max())
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:
 *         return _box_flba((<CFLBAStatistics*> statistics).max(), type_length)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__box_flba((( parquet::FLBAStatistics *)__pyx_v_statistics)->max(), __pyx_v_type_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":236
 *     elif physical_type == ParquetType_BYTE_ARRAY:
 *         return _box_byte_array((<CByteArrayStatistics*> statistics).max())
 *     elif physical_type == ParquetType_FIXED_LEN_BYTE_ARRAY:             # <<<<<<<<<<<<<<
 *         return _box_flba((<CFLBAStatistics*> statistics).max(), type_length)
 * 
 */
    break;
    default: break;
  }

  /* "pyarrow/_parquet.pyx":221
 * 
 * 
 * cdef _cast_statistic_raw_max(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     cdef ParquetType physical_type = statistics.physical_type()
 *     cdef uint32_t type_length = statistics.descr().type_length()
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet._cast_statistic_raw_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":240
 * 
 * 
 * cdef _cast_statistic_min(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     min_raw = _cast_statistic_raw_min(statistics)
 *     return _box_logical_type_value(min_raw, statistics.descr())
 */

static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_min( parquet::Statistics *__pyx_v_statistics) {
  PyObject *__pyx_v_min_raw = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_cast_statistic_min", 0);

  /* "pyarrow/_parquet.pyx":241
 * 
 * cdef _cast_statistic_min(CStatistics* statistics):
 *     min_raw = _cast_statistic_raw_min(statistics)             # <<<<<<<<<<<<<<
 *     return _box_logical_type_value(min_raw, statistics.descr())
 * 
 */
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__cast_statistic_raw_min(__pyx_v_statistics); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_min_raw = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":242
 * cdef _cast_statistic_min(CStatistics* statistics):
 *     min_raw = _cast_statistic_raw_min(statistics)
 *     return _box_logical_type_value(min_raw, statistics.descr())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__box_logical_type_value(__pyx_v_min_raw, __pyx_v_statistics->descr()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":240
 * 
 * 
 * cdef _cast_statistic_min(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     min_raw = _cast_statistic_raw_min(statistics)
 *     return _box_logical_type_value(min_raw, statistics.descr())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet._cast_statistic_min", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_min_raw);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":245
 * 
 * 
 * cdef _cast_statistic_max(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     max_raw = _cast_statistic_raw_max(statistics)
 *     return _box_logical_type_value(max_raw, statistics.descr())
 */

static PyObject *__pyx_f_7pyarrow_8_parquet__cast_statistic_max( parquet::Statistics *__pyx_v_statistics) {
  PyObject *__pyx_v_max_raw = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_cast_statistic_max", 0);

  /* "pyarrow/_parquet.pyx":246
 * 
 * cdef _cast_statistic_max(CStatistics* statistics):
 *     max_raw = _cast_statistic_raw_max(statistics)             # <<<<<<<<<<<<<<
 *     return _box_logical_type_value(max_raw, statistics.descr())
 * 
 */
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__cast_statistic_raw_max(__pyx_v_statistics); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_max_raw = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":247
 * cdef _cast_statistic_max(CStatistics* statistics):
 *     max_raw = _cast_statistic_raw_max(statistics)
 *     return _box_logical_type_value(max_raw, statistics.descr())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet__box_logical_type_value(__pyx_v_max_raw, __pyx_v_statistics->descr()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":245
 * 
 * 
 * cdef _cast_statistic_max(CStatistics* statistics):             # <<<<<<<<<<<<<<
 *     max_raw = _cast_statistic_raw_max(statistics)
 *     return _box_logical_type_value(max_raw, statistics.descr())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet._cast_statistic_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_max_raw);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":250
 * 
 * 
 * cdef _box_logical_type_value(object value, const ColumnDescriptor* descr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CParquetLogicalType* ltype = descr.logical_type().get()
 */

static PyObject *__pyx_f_7pyarrow_8_parquet__box_logical_type_value(PyObject *__pyx_v_value,  parquet::ColumnDescriptor const *__pyx_v_descr) {
   parquet::LogicalType const *__pyx_v_ltype;
  enum  parquet::LogicalType::TimeUnit::unit __pyx_v_time_unit;
   parquet::IntLogicalType const *__pyx_v_itype;
   parquet::TimestampLogicalType const *__pyx_v_ts_type;
  PyObject *__pyx_v_converter = NULL;
  PyObject *__pyx_v_pytz = NULL;
  PyObject *__pyx_v_tzinfo = NULL;
  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;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("_box_logical_type_value", 0);

  /* "pyarrow/_parquet.pyx":252
 * cdef _box_logical_type_value(object value, const ColumnDescriptor* descr):
 *     cdef:
 *         const CParquetLogicalType* ltype = descr.logical_type().get()             # <<<<<<<<<<<<<<
 *         ParquetTimeUnit time_unit
 *         const CParquetIntType* itype
 */
  __pyx_v_ltype = __pyx_v_descr->logical_type().get();

  /* "pyarrow/_parquet.pyx":257
 *         const CParquetTimestampType* ts_type
 * 
 *     if ltype.type() == ParquetLogicalType_STRING:             # <<<<<<<<<<<<<<
 *         return value.decode('utf8')
 *     elif ltype.type() == ParquetLogicalType_TIME:
 */
  __pyx_t_1 = ((__pyx_v_ltype->type() ==  parquet::LogicalType::Type::STRING) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":258
 * 
 *     if ltype.type() == ParquetLogicalType_STRING:
 *         return value.decode('utf8')             # <<<<<<<<<<<<<<
 *     elif ltype.type() == ParquetLogicalType_TIME:
 *         time_unit = (<const CParquetTimeType*> ltype).time_unit()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_decode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 258, __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, __pyx_n_u_utf8) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_u_utf8);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":257
 *         const CParquetTimestampType* ts_type
 * 
 *     if ltype.type() == ParquetLogicalType_STRING:             # <<<<<<<<<<<<<<
 *         return value.decode('utf8')
 *     elif ltype.type() == ParquetLogicalType_TIME:
 */
  }

  /* "pyarrow/_parquet.pyx":259
 *     if ltype.type() == ParquetLogicalType_STRING:
 *         return value.decode('utf8')
 *     elif ltype.type() == ParquetLogicalType_TIME:             # <<<<<<<<<<<<<<
 *         time_unit = (<const CParquetTimeType*> ltype).time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:
 */
  __pyx_t_1 = ((__pyx_v_ltype->type() ==  parquet::LogicalType::Type::TIME) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":260
 *         return value.decode('utf8')
 *     elif ltype.type() == ParquetLogicalType_TIME:
 *         time_unit = (<const CParquetTimeType*> ltype).time_unit()             # <<<<<<<<<<<<<<
 *         if time_unit == ParquetTimeUnit_MILLIS:
 *             return _box_time_milli(value)
 */
    __pyx_v_time_unit = (( parquet::TimeLogicalType const *)__pyx_v_ltype)->time_unit();

    /* "pyarrow/_parquet.pyx":261
 *     elif ltype.type() == ParquetLogicalType_TIME:
 *         time_unit = (<const CParquetTimeType*> ltype).time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:             # <<<<<<<<<<<<<<
 *             return _box_time_milli(value)
 *         else:
 */
    __pyx_t_1 = ((__pyx_v_time_unit ==  parquet::LogicalType::TimeUnit::MILLIS) != 0);
    if (__pyx_t_1) {

      /* "pyarrow/_parquet.pyx":262
 *         time_unit = (<const CParquetTimeType*> ltype).time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:
 *             return _box_time_milli(value)             # <<<<<<<<<<<<<<
 *         else:
 *             return _box_time_micro(value)
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_box_time_milli); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = NULL;
      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_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_value);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;

      /* "pyarrow/_parquet.pyx":261
 *     elif ltype.type() == ParquetLogicalType_TIME:
 *         time_unit = (<const CParquetTimeType*> ltype).time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:             # <<<<<<<<<<<<<<
 *             return _box_time_milli(value)
 *         else:
 */
    }

    /* "pyarrow/_parquet.pyx":264
 *             return _box_time_milli(value)
 *         else:
 *             return _box_time_micro(value)             # <<<<<<<<<<<<<<
 *     elif ltype.type() == ParquetLogicalType_TIMESTAMP:
 *         ts_type = <const CParquetTimestampType*> ltype
 */
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_box_time_micro); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = NULL;
      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_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_value);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;
    }

    /* "pyarrow/_parquet.pyx":259
 *     if ltype.type() == ParquetLogicalType_STRING:
 *         return value.decode('utf8')
 *     elif ltype.type() == ParquetLogicalType_TIME:             # <<<<<<<<<<<<<<
 *         time_unit = (<const CParquetTimeType*> ltype).time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:
 */
  }

  /* "pyarrow/_parquet.pyx":265
 *         else:
 *             return _box_time_micro(value)
 *     elif ltype.type() == ParquetLogicalType_TIMESTAMP:             # <<<<<<<<<<<<<<
 *         ts_type = <const CParquetTimestampType*> ltype
 *         time_unit = ts_type.time_unit()
 */
  __pyx_t_1 = ((__pyx_v_ltype->type() ==  parquet::LogicalType::Type::TIMESTAMP) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":266
 *             return _box_time_micro(value)
 *     elif ltype.type() == ParquetLogicalType_TIMESTAMP:
 *         ts_type = <const CParquetTimestampType*> ltype             # <<<<<<<<<<<<<<
 *         time_unit = ts_type.time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:
 */
    __pyx_v_ts_type = (( parquet::TimestampLogicalType const *)__pyx_v_ltype);

    /* "pyarrow/_parquet.pyx":267
 *     elif ltype.type() == ParquetLogicalType_TIMESTAMP:
 *         ts_type = <const CParquetTimestampType*> ltype
 *         time_unit = ts_type.time_unit()             # <<<<<<<<<<<<<<
 *         if time_unit == ParquetTimeUnit_MILLIS:
 *             converter = _datetime_conversion_functions()[TimeUnit_MILLI]
 */
    __pyx_v_time_unit = __pyx_v_ts_type->time_unit();

    /* "pyarrow/_parquet.pyx":268
 *         ts_type = <const CParquetTimestampType*> ltype
 *         time_unit = ts_type.time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:             # <<<<<<<<<<<<<<
 *             converter = _datetime_conversion_functions()[TimeUnit_MILLI]
 *         elif time_unit == ParquetTimeUnit_MICROS:
 */
    switch (__pyx_v_time_unit) {
      case  parquet::LogicalType::TimeUnit::MILLIS:

      /* "pyarrow/_parquet.pyx":269
 *         time_unit = ts_type.time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:
 *             converter = _datetime_conversion_functions()[TimeUnit_MILLI]             # <<<<<<<<<<<<<<
 *         elif time_unit == ParquetTimeUnit_MICROS:
 *             converter = _datetime_conversion_functions()[TimeUnit_MICRO]
 */
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_datetime_conversion_functions); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = NULL;
      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_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(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_enum____arrow_3a__3a_TimeUnit_3a__3a_type( arrow::TimeUnit::MILLI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __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_v_converter = __pyx_t_4;
      __pyx_t_4 = 0;

      /* "pyarrow/_parquet.pyx":268
 *         ts_type = <const CParquetTimestampType*> ltype
 *         time_unit = ts_type.time_unit()
 *         if time_unit == ParquetTimeUnit_MILLIS:             # <<<<<<<<<<<<<<
 *             converter = _datetime_conversion_functions()[TimeUnit_MILLI]
 *         elif time_unit == ParquetTimeUnit_MICROS:
 */
      break;
      case  parquet::LogicalType::TimeUnit::MICROS:

      /* "pyarrow/_parquet.pyx":271
 *             converter = _datetime_conversion_functions()[TimeUnit_MILLI]
 *         elif time_unit == ParquetTimeUnit_MICROS:
 *             converter = _datetime_conversion_functions()[TimeUnit_MICRO]             # <<<<<<<<<<<<<<
 *         elif time_unit == ParquetTimeUnit_NANOS:
 *             converter = _datetime_conversion_functions()[TimeUnit_NANO]
 */
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_datetime_conversion_functions); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_4 = (__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_4)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_enum____arrow_3a__3a_TimeUnit_3a__3a_type( arrow::TimeUnit::MICRO); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_converter = __pyx_t_2;
      __pyx_t_2 = 0;

      /* "pyarrow/_parquet.pyx":270
 *         if time_unit == ParquetTimeUnit_MILLIS:
 *             converter = _datetime_conversion_functions()[TimeUnit_MILLI]
 *         elif time_unit == ParquetTimeUnit_MICROS:             # <<<<<<<<<<<<<<
 *             converter = _datetime_conversion_functions()[TimeUnit_MICRO]
 *         elif time_unit == ParquetTimeUnit_NANOS:
 */
      break;
      case  parquet::LogicalType::TimeUnit::NANOS:

      /* "pyarrow/_parquet.pyx":273
 *             converter = _datetime_conversion_functions()[TimeUnit_MICRO]
 *         elif time_unit == ParquetTimeUnit_NANOS:
 *             converter = _datetime_conversion_functions()[TimeUnit_NANO]             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("Unsupported time unit")
 */
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_datetime_conversion_functions); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = NULL;
      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_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(0, 273, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_enum____arrow_3a__3a_TimeUnit_3a__3a_type( arrow::TimeUnit::NANO); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __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_v_converter = __pyx_t_4;
      __pyx_t_4 = 0;

      /* "pyarrow/_parquet.pyx":272
 *         elif time_unit == ParquetTimeUnit_MICROS:
 *             converter = _datetime_conversion_functions()[TimeUnit_MICRO]
 *         elif time_unit == ParquetTimeUnit_NANOS:             # <<<<<<<<<<<<<<
 *             converter = _datetime_conversion_functions()[TimeUnit_NANO]
 *         else:
 */
      break;
      default:

      /* "pyarrow/_parquet.pyx":275
 *             converter = _datetime_conversion_functions()[TimeUnit_NANO]
 *         else:
 *             raise ValueError("Unsupported time unit")             # <<<<<<<<<<<<<<
 * 
 *         if ts_type.is_adjusted_to_utc():
 */
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 275, __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, 275, __pyx_L1_error)
      break;
    }

    /* "pyarrow/_parquet.pyx":277
 *             raise ValueError("Unsupported time unit")
 * 
 *         if ts_type.is_adjusted_to_utc():             # <<<<<<<<<<<<<<
 *             import pytz
 *             tzinfo = pytz.utc
 */
    __pyx_t_1 = (__pyx_v_ts_type->is_adjusted_to_utc() != 0);
    if (__pyx_t_1) {

      /* "pyarrow/_parquet.pyx":278
 * 
 *         if ts_type.is_adjusted_to_utc():
 *             import pytz             # <<<<<<<<<<<<<<
 *             tzinfo = pytz.utc
 *         else:
 */
      __pyx_t_4 = __Pyx_Import(__pyx_n_s_pytz, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_pytz = __pyx_t_4;
      __pyx_t_4 = 0;

      /* "pyarrow/_parquet.pyx":279
 *         if ts_type.is_adjusted_to_utc():
 *             import pytz
 *             tzinfo = pytz.utc             # <<<<<<<<<<<<<<
 *         else:
 *             tzinfo = None
 */
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_pytz, __pyx_n_s_utc); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_tzinfo = __pyx_t_4;
      __pyx_t_4 = 0;

      /* "pyarrow/_parquet.pyx":277
 *             raise ValueError("Unsupported time unit")
 * 
 *         if ts_type.is_adjusted_to_utc():             # <<<<<<<<<<<<<<
 *             import pytz
 *             tzinfo = pytz.utc
 */
      goto __pyx_L5;
    }

    /* "pyarrow/_parquet.pyx":281
 *             tzinfo = pytz.utc
 *         else:
 *             tzinfo = None             # <<<<<<<<<<<<<<
 * 
 *         return converter(value, tzinfo)
 */
    /*else*/ {
      __Pyx_INCREF(Py_None);
      __pyx_v_tzinfo = Py_None;
    }
    __pyx_L5:;

    /* "pyarrow/_parquet.pyx":283
 *             tzinfo = None
 * 
 *         return converter(value, tzinfo)             # <<<<<<<<<<<<<<
 *     elif ltype.type() == ParquetLogicalType_INT:
 *         itype = <const CParquetIntType*> ltype
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_converter);
    __pyx_t_3 = __pyx_v_converter; __pyx_t_2 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(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_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_value, __pyx_v_tzinfo};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 283, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_value, __pyx_v_tzinfo};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 283, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 283, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_2) {
        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2); __pyx_t_2 = NULL;
      }
      __Pyx_INCREF(__pyx_v_value);
      __Pyx_GIVEREF(__pyx_v_value);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_value);
      __Pyx_INCREF(__pyx_v_tzinfo);
      __Pyx_GIVEREF(__pyx_v_tzinfo);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_tzinfo);
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 283, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":265
 *         else:
 *             return _box_time_micro(value)
 *     elif ltype.type() == ParquetLogicalType_TIMESTAMP:             # <<<<<<<<<<<<<<
 *         ts_type = <const CParquetTimestampType*> ltype
 *         time_unit = ts_type.time_unit()
 */
  }

  /* "pyarrow/_parquet.pyx":284
 * 
 *         return converter(value, tzinfo)
 *     elif ltype.type() == ParquetLogicalType_INT:             # <<<<<<<<<<<<<<
 *         itype = <const CParquetIntType*> ltype
 *         if not itype.is_signed() and itype.bit_width() == 32:
 */
  __pyx_t_1 = ((__pyx_v_ltype->type() ==  parquet::LogicalType::Type::INT) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":285
 *         return converter(value, tzinfo)
 *     elif ltype.type() == ParquetLogicalType_INT:
 *         itype = <const CParquetIntType*> ltype             # <<<<<<<<<<<<<<
 *         if not itype.is_signed() and itype.bit_width() == 32:
 *             return int(np.int32(value).view(np.uint32))
 */
    __pyx_v_itype = (( parquet::IntLogicalType const *)__pyx_v_ltype);

    /* "pyarrow/_parquet.pyx":286
 *     elif ltype.type() == ParquetLogicalType_INT:
 *         itype = <const CParquetIntType*> ltype
 *         if not itype.is_signed() and itype.bit_width() == 32:             # <<<<<<<<<<<<<<
 *             return int(np.int32(value).view(np.uint32))
 *         elif not itype.is_signed() and itype.bit_width() == 64:
 */
    __pyx_t_7 = ((!(__pyx_v_itype->is_signed() != 0)) != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_1 = __pyx_t_7;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_itype->bit_width() == 32) != 0);
    __pyx_t_1 = __pyx_t_7;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_1) {

      /* "pyarrow/_parquet.pyx":287
 *         itype = <const CParquetIntType*> ltype
 *         if not itype.is_signed() and itype.bit_width() == 32:
 *             return int(np.int32(value).view(np.uint32))             # <<<<<<<<<<<<<<
 *         elif not itype.is_signed() and itype.bit_width() == 64:
 *             return int(np.int64(value).view(np.uint64))
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_uint32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __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_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = __pyx_t_2;
      __pyx_t_2 = 0;
      goto __pyx_L0;

      /* "pyarrow/_parquet.pyx":286
 *     elif ltype.type() == ParquetLogicalType_INT:
 *         itype = <const CParquetIntType*> ltype
 *         if not itype.is_signed() and itype.bit_width() == 32:             # <<<<<<<<<<<<<<
 *             return int(np.int32(value).view(np.uint32))
 *         elif not itype.is_signed() and itype.bit_width() == 64:
 */
    }

    /* "pyarrow/_parquet.pyx":288
 *         if not itype.is_signed() and itype.bit_width() == 32:
 *             return int(np.int32(value).view(np.uint32))
 *         elif not itype.is_signed() and itype.bit_width() == 64:             # <<<<<<<<<<<<<<
 *             return int(np.int64(value).view(np.uint64))
 *         else:
 */
    __pyx_t_7 = ((!(__pyx_v_itype->is_signed() != 0)) != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_1 = __pyx_t_7;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_itype->bit_width() == 64) != 0);
    __pyx_t_1 = __pyx_t_7;
    __pyx_L9_bool_binop_done:;
    if (__pyx_t_1) {

      /* "pyarrow/_parquet.pyx":289
 *             return int(np.int32(value).view(np.uint32))
 *         elif not itype.is_signed() and itype.bit_width() == 64:
 *             return int(np.int64(value).view(np.uint64))             # <<<<<<<<<<<<<<
 *         else:
 *             return value
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_value);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __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, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 289, __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;

      /* "pyarrow/_parquet.pyx":288
 *         if not itype.is_signed() and itype.bit_width() == 32:
 *             return int(np.int32(value).view(np.uint32))
 *         elif not itype.is_signed() and itype.bit_width() == 64:             # <<<<<<<<<<<<<<
 *             return int(np.int64(value).view(np.uint64))
 *         else:
 */
    }

    /* "pyarrow/_parquet.pyx":291
 *             return int(np.int64(value).view(np.uint64))
 *         else:
 *             return value             # <<<<<<<<<<<<<<
 *     else:
 *         # No logical boxing defined
 */
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_value);
      __pyx_r = __pyx_v_value;
      goto __pyx_L0;
    }

    /* "pyarrow/_parquet.pyx":284
 * 
 *         return converter(value, tzinfo)
 *     elif ltype.type() == ParquetLogicalType_INT:             # <<<<<<<<<<<<<<
 *         itype = <const CParquetIntType*> ltype
 *         if not itype.is_signed() and itype.bit_width() == 32:
 */
  }

  /* "pyarrow/_parquet.pyx":294
 *     else:
 *         # No logical boxing defined
 *         return value             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_value);
    __pyx_r = __pyx_v_value;
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":250
 * 
 * 
 * cdef _box_logical_type_value(object value, const ColumnDescriptor* descr):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CParquetLogicalType* ltype = descr.logical_type().get()
 */

  /* 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_6);
  __Pyx_AddTraceback("pyarrow._parquet._box_logical_type_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_converter);
  __Pyx_XDECREF(__pyx_v_pytz);
  __Pyx_XDECREF(__pyx_v_tzinfo);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":297
 * 
 * 
 * cdef _box_byte_array(ParquetByteArray val):             # <<<<<<<<<<<<<<
 *     return cp.PyBytes_FromStringAndSize(<char*> val.ptr, <Py_ssize_t> val.len)
 * 
 */

static PyObject *__pyx_f_7pyarrow_8_parquet__box_byte_array( parquet::ByteArray __pyx_v_val) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_box_byte_array", 0);

  /* "pyarrow/_parquet.pyx":298
 * 
 * cdef _box_byte_array(ParquetByteArray val):
 *     return cp.PyBytes_FromStringAndSize(<char*> val.ptr, <Py_ssize_t> val.len)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyBytes_FromStringAndSize(((char *)__pyx_v_val.ptr), ((Py_ssize_t)__pyx_v_val.len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":297
 * 
 * 
 * cdef _box_byte_array(ParquetByteArray val):             # <<<<<<<<<<<<<<
 *     return cp.PyBytes_FromStringAndSize(<char*> val.ptr, <Py_ssize_t> val.len)
 * 
 */

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

/* "pyarrow/_parquet.pyx":301
 * 
 * 
 * cdef _box_flba(ParquetFLBA val, uint32_t len):             # <<<<<<<<<<<<<<
 *     return cp.PyBytes_FromStringAndSize(<char*> val.ptr, <Py_ssize_t> len)
 * 
 */

static PyObject *__pyx_f_7pyarrow_8_parquet__box_flba( parquet::FLBA __pyx_v_val, uint32_t __pyx_v_len) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_box_flba", 0);

  /* "pyarrow/_parquet.pyx":302
 * 
 * cdef _box_flba(ParquetFLBA val, uint32_t len):
 *     return cp.PyBytes_FromStringAndSize(<char*> val.ptr, <Py_ssize_t> len)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyBytes_FromStringAndSize(((char *)__pyx_v_val.ptr), ((Py_ssize_t)__pyx_v_len)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":301
 * 
 * 
 * cdef _box_flba(ParquetFLBA val, uint32_t len):             # <<<<<<<<<<<<<<
 *     return cp.PyBytes_FromStringAndSize(<char*> val.ptr, <Py_ssize_t> len)
 * 
 */

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

/* "pyarrow/_parquet.pyx":311
 *         RowGroupMetaData parent
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_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_7pyarrow_8_parquet_19ColumnChunkMetaData___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static int __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

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

/* "pyarrow/_parquet.pyx":314
 *         pass
 * 
 *     cdef init(self, RowGroupMetaData parent, int i):             # <<<<<<<<<<<<<<
 *         self.up_metadata = parent.metadata.ColumnChunk(i)
 *         self.metadata = self.up_metadata.get()
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_19ColumnChunkMetaData_init(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_parent, int __pyx_v_i) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_parquet.pyx":315
 * 
 *     cdef init(self, RowGroupMetaData parent, int i):
 *         self.up_metadata = parent.metadata.ColumnChunk(i)             # <<<<<<<<<<<<<<
 *         self.metadata = self.up_metadata.get()
 *         self.parent = parent
 */
  __pyx_v_self->up_metadata = __pyx_v_parent->metadata->ColumnChunk(__pyx_v_i);

  /* "pyarrow/_parquet.pyx":316
 *     cdef init(self, RowGroupMetaData parent, int i):
 *         self.up_metadata = parent.metadata.ColumnChunk(i)
 *         self.metadata = self.up_metadata.get()             # <<<<<<<<<<<<<<
 *         self.parent = parent
 * 
 */
  __pyx_v_self->metadata = __pyx_v_self->up_metadata.get();

  /* "pyarrow/_parquet.pyx":317
 *         self.up_metadata = parent.metadata.ColumnChunk(i)
 *         self.metadata = self.up_metadata.get()
 *         self.parent = parent             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_parent));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_parent));
  __Pyx_GOTREF(__pyx_v_self->parent);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->parent));
  __pyx_v_self->parent = __pyx_v_parent;

  /* "pyarrow/_parquet.pyx":314
 *         pass
 * 
 *     cdef init(self, RowGroupMetaData parent, int i):             # <<<<<<<<<<<<<<
 *         self.up_metadata = parent.metadata.ColumnChunk(i)
 *         self.metadata = self.up_metadata.get()
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":319
 *         self.parent = parent
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         statistics = indent(repr(self.statistics), 4 * ' ')
 *         return """{0}
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_3__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_2__repr__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_2__repr__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  PyObject *__pyx_v_statistics = NULL;
  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;
  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;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyarrow/_parquet.pyx":320
 * 
 *     def __repr__(self):
 *         statistics = indent(repr(self.statistics), 4 * ' ')             # <<<<<<<<<<<<<<
 *         return """{0}
 *   file_offset: {1}
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_indent); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_statistics); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_Repr(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 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_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_kp_u__6};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_kp_u__6};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_4);
    __Pyx_INCREF(__pyx_kp_u__6);
    __Pyx_GIVEREF(__pyx_kp_u__6);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_kp_u__6);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_statistics = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":321
 *     def __repr__(self):
 *         statistics = indent(repr(self.statistics), 4 * ' ')
 *         return """{0}             # <<<<<<<<<<<<<<
 *   file_offset: {1}
 *   file_path: {2}
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":336
 *   data_page_offset: {12}
 *   total_compressed_size: {13}
 *   total_uncompressed_size: {14}""".format(object.__repr__(self),             # <<<<<<<<<<<<<<
 *                                           self.file_offset,
 *                                           self.file_path,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_file_offset_1_file_path_2_phy, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_n_s_repr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __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_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self));
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":337
 *   total_compressed_size: {13}
 *   total_uncompressed_size: {14}""".format(object.__repr__(self),
 *                                           self.file_offset,             # <<<<<<<<<<<<<<
 *                                           self.file_path,
 *                                           self.physical_type,
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_file_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "pyarrow/_parquet.pyx":338
 *   total_uncompressed_size: {14}""".format(object.__repr__(self),
 *                                           self.file_offset,
 *                                           self.file_path,             # <<<<<<<<<<<<<<
 *                                           self.physical_type,
 *                                           self.num_values,
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_file_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pyarrow/_parquet.pyx":339
 *                                           self.file_offset,
 *                                           self.file_path,
 *                                           self.physical_type,             # <<<<<<<<<<<<<<
 *                                           self.num_values,
 *                                           self.path_in_schema,
 */
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "pyarrow/_parquet.pyx":340
 *                                           self.file_path,
 *                                           self.physical_type,
 *                                           self.num_values,             # <<<<<<<<<<<<<<
 *                                           self.path_in_schema,
 *                                           self.is_stats_set,
 */
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_values); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "pyarrow/_parquet.pyx":341
 *                                           self.physical_type,
 *                                           self.num_values,
 *                                           self.path_in_schema,             # <<<<<<<<<<<<<<
 *                                           self.is_stats_set,
 *                                           statistics,
 */
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_path_in_schema); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);

  /* "pyarrow/_parquet.pyx":342
 *                                           self.num_values,
 *                                           self.path_in_schema,
 *                                           self.is_stats_set,             # <<<<<<<<<<<<<<
 *                                           statistics,
 *                                           self.compression,
 */
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_stats_set); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);

  /* "pyarrow/_parquet.pyx":344
 *                                           self.is_stats_set,
 *                                           statistics,
 *                                           self.compression,             # <<<<<<<<<<<<<<
 *                                           self.encodings,
 *                                           self.has_dictionary_page,
 */
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_compression); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);

  /* "pyarrow/_parquet.pyx":345
 *                                           statistics,
 *                                           self.compression,
 *                                           self.encodings,             # <<<<<<<<<<<<<<
 *                                           self.has_dictionary_page,
 *                                           self.dictionary_page_offset,
 */
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_encodings); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);

  /* "pyarrow/_parquet.pyx":346
 *                                           self.compression,
 *                                           self.encodings,
 *                                           self.has_dictionary_page,             # <<<<<<<<<<<<<<
 *                                           self.dictionary_page_offset,
 *                                           self.data_page_offset,
 */
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_dictionary_page); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);

  /* "pyarrow/_parquet.pyx":347
 *                                           self.encodings,
 *                                           self.has_dictionary_page,
 *                                           self.dictionary_page_offset,             # <<<<<<<<<<<<<<
 *                                           self.data_page_offset,
 *                                           self.total_compressed_size,
 */
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_dictionary_page_offset); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);

  /* "pyarrow/_parquet.pyx":348
 *                                           self.has_dictionary_page,
 *                                           self.dictionary_page_offset,
 *                                           self.data_page_offset,             # <<<<<<<<<<<<<<
 *                                           self.total_compressed_size,
 *                                           self.total_uncompressed_size)
 */
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_data_page_offset); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);

  /* "pyarrow/_parquet.pyx":349
 *                                           self.dictionary_page_offset,
 *                                           self.data_page_offset,
 *                                           self.total_compressed_size,             # <<<<<<<<<<<<<<
 *                                           self.total_uncompressed_size)
 * 
 */
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_compressed_size); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);

  /* "pyarrow/_parquet.pyx":350
 *                                           self.data_page_offset,
 *                                           self.total_compressed_size,
 *                                           self.total_uncompressed_size)             # <<<<<<<<<<<<<<
 * 
 *     def to_dict(self):
 */
  __pyx_t_17 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_uncompressed_size); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_18 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[16] = {__pyx_t_18, __pyx_t_6, __pyx_t_4, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_v_statistics, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 15+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[16] = {__pyx_t_18, __pyx_t_6, __pyx_t_4, __pyx_t_3, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_v_statistics, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 15+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
  } else
  #endif
  {
    __pyx_t_19 = PyTuple_New(15+__pyx_t_5); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
    if (__pyx_t_18) {
      __Pyx_GIVEREF(__pyx_t_18); PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_18); __pyx_t_18 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_19, 0+__pyx_t_5, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_19, 1+__pyx_t_5, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_19, 2+__pyx_t_5, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_19, 3+__pyx_t_5, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_19, 4+__pyx_t_5, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_19, 5+__pyx_t_5, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_19, 6+__pyx_t_5, __pyx_t_10);
    __Pyx_INCREF(__pyx_v_statistics);
    __Pyx_GIVEREF(__pyx_v_statistics);
    PyTuple_SET_ITEM(__pyx_t_19, 7+__pyx_t_5, __pyx_v_statistics);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_19, 8+__pyx_t_5, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_19, 9+__pyx_t_5, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_19, 10+__pyx_t_5, __pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_19, 11+__pyx_t_5, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_19, 12+__pyx_t_5, __pyx_t_15);
    __Pyx_GIVEREF(__pyx_t_16);
    PyTuple_SET_ITEM(__pyx_t_19, 13+__pyx_t_5, __pyx_t_16);
    __Pyx_GIVEREF(__pyx_t_17);
    PyTuple_SET_ITEM(__pyx_t_19, 14+__pyx_t_5, __pyx_t_17);
    __pyx_t_6 = 0;
    __pyx_t_4 = 0;
    __pyx_t_3 = 0;
    __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_t_13 = 0;
    __pyx_t_14 = 0;
    __pyx_t_15 = 0;
    __pyx_t_16 = 0;
    __pyx_t_17 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":319
 *         self.parent = parent
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         statistics = indent(repr(self.statistics), 4 * ' ')
 *         return """{0}
 */

  /* 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_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_statistics);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":352
 *                                           self.total_uncompressed_size)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         d = dict(
 *             file_offset=self.file_offset,
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_5to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_4to_dict[] = "ColumnChunkMetaData.to_dict(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_5to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_4to_dict(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_4to_dict(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  PyObject *__pyx_v_d = NULL;
  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;
  __Pyx_RefNannySetupContext("to_dict", 0);

  /* "pyarrow/_parquet.pyx":354
 *     def to_dict(self):
 *         d = dict(
 *             file_offset=self.file_offset,             # <<<<<<<<<<<<<<
 *             file_path=self.file_path,
 *             physical_type=self.physical_type,
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_file_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_file_offset, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":355
 *         d = dict(
 *             file_offset=self.file_offset,
 *             file_path=self.file_path,             # <<<<<<<<<<<<<<
 *             physical_type=self.physical_type,
 *             num_values=self.num_values,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_file_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 355, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_file_path, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":356
 *             file_offset=self.file_offset,
 *             file_path=self.file_path,
 *             physical_type=self.physical_type,             # <<<<<<<<<<<<<<
 *             num_values=self.num_values,
 *             path_in_schema=self.path_in_schema,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_physical_type, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":357
 *             file_path=self.file_path,
 *             physical_type=self.physical_type,
 *             num_values=self.num_values,             # <<<<<<<<<<<<<<
 *             path_in_schema=self.path_in_schema,
 *             is_stats_set=self.is_stats_set,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_values, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":358
 *             physical_type=self.physical_type,
 *             num_values=self.num_values,
 *             path_in_schema=self.path_in_schema,             # <<<<<<<<<<<<<<
 *             is_stats_set=self.is_stats_set,
 *             statistics=self.statistics.to_dict(),
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_path_in_schema); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_path_in_schema, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":359
 *             num_values=self.num_values,
 *             path_in_schema=self.path_in_schema,
 *             is_stats_set=self.is_stats_set,             # <<<<<<<<<<<<<<
 *             statistics=self.statistics.to_dict(),
 *             compression=self.compression,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_stats_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_is_stats_set, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":360
 *             path_in_schema=self.path_in_schema,
 *             is_stats_set=self.is_stats_set,
 *             statistics=self.statistics.to_dict(),             # <<<<<<<<<<<<<<
 *             compression=self.compression,
 *             encodings=self.encodings,
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_statistics); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_to_dict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __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_2 = (__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_2)) __PYX_ERR(0, 360, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_statistics, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":361
 *             is_stats_set=self.is_stats_set,
 *             statistics=self.statistics.to_dict(),
 *             compression=self.compression,             # <<<<<<<<<<<<<<
 *             encodings=self.encodings,
 *             has_dictionary_page=self.has_dictionary_page,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_compression); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 361, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_compression, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":362
 *             statistics=self.statistics.to_dict(),
 *             compression=self.compression,
 *             encodings=self.encodings,             # <<<<<<<<<<<<<<
 *             has_dictionary_page=self.has_dictionary_page,
 *             dictionary_page_offset=self.dictionary_page_offset,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_encodings); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_encodings, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":363
 *             compression=self.compression,
 *             encodings=self.encodings,
 *             has_dictionary_page=self.has_dictionary_page,             # <<<<<<<<<<<<<<
 *             dictionary_page_offset=self.dictionary_page_offset,
 *             data_page_offset=self.data_page_offset,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_dictionary_page); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_has_dictionary_page, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":364
 *             encodings=self.encodings,
 *             has_dictionary_page=self.has_dictionary_page,
 *             dictionary_page_offset=self.dictionary_page_offset,             # <<<<<<<<<<<<<<
 *             data_page_offset=self.data_page_offset,
 *             total_compressed_size=self.total_compressed_size,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_dictionary_page_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dictionary_page_offset, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":365
 *             has_dictionary_page=self.has_dictionary_page,
 *             dictionary_page_offset=self.dictionary_page_offset,
 *             data_page_offset=self.data_page_offset,             # <<<<<<<<<<<<<<
 *             total_compressed_size=self.total_compressed_size,
 *             total_uncompressed_size=self.total_uncompressed_size
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_data_page_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_data_page_offset, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":366
 *             dictionary_page_offset=self.dictionary_page_offset,
 *             data_page_offset=self.data_page_offset,
 *             total_compressed_size=self.total_compressed_size,             # <<<<<<<<<<<<<<
 *             total_uncompressed_size=self.total_uncompressed_size
 *         )
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_compressed_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_total_compressed_size, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":367
 *             data_page_offset=self.data_page_offset,
 *             total_compressed_size=self.total_compressed_size,
 *             total_uncompressed_size=self.total_uncompressed_size             # <<<<<<<<<<<<<<
 *         )
 *         return d
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_uncompressed_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_total_uncompressed_size, __pyx_t_2) < 0) __PYX_ERR(0, 354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_d = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":369
 *             total_uncompressed_size=self.total_uncompressed_size
 *         )
 *         return d             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_d);
  __pyx_r = __pyx_v_d;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":352
 *                                           self.total_uncompressed_size)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         d = dict(
 *             file_offset=self.file_offset,
 */

  /* 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_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.to_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":371
 *         return d
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_7__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_7__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_6__eq__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_6__eq__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pyarrow/_parquet.pyx":372
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":373
 *     def __eq__(self, other):
 *         try:
 *             return self.equals(other)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_equals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 373, __pyx_L3_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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_other) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_other);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 373, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;

      /* "pyarrow/_parquet.pyx":372
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    }
    __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;

    /* "pyarrow/_parquet.pyx":374
 *         try:
 *             return self.equals(other)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 * 
 */
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 374, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":375
 *             return self.equals(other)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *     def equals(self, ColumnChunkMetaData other):
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_builtin_NotImplemented);
      __pyx_r = __pyx_builtin_NotImplemented;
      __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;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":372
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    __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_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;
  }

  /* "pyarrow/_parquet.pyx":371
 *         return d
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":377
 *             return NotImplemented
 * 
 *     def equals(self, ColumnChunkMetaData other):             # <<<<<<<<<<<<<<
 *         # TODO(kszucs): implement native Equals method for CColumnChunkMetaData
 *         return (self.file_offset == other.file_offset and
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_8equals[] = "ColumnChunkMetaData.equals(self, ColumnChunkMetaData other)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equals (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_7pyarrow_8_parquet_ColumnChunkMetaData, 1, "other", 0))) __PYX_ERR(0, 377, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_8equals(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_8equals(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_other) {
  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;
  __Pyx_RefNannySetupContext("equals", 0);

  /* "pyarrow/_parquet.pyx":379
 *     def equals(self, ColumnChunkMetaData other):
 *         # TODO(kszucs): implement native Equals method for CColumnChunkMetaData
 *         return (self.file_offset == other.file_offset and             # <<<<<<<<<<<<<<
 *                 self.file_path == other.file_path and
 *                 self.physical_type == other.physical_type and
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_file_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_file_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 379, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 379, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":380
 *         # TODO(kszucs): implement native Equals method for CColumnChunkMetaData
 *         return (self.file_offset == other.file_offset and
 *                 self.file_path == other.file_path and             # <<<<<<<<<<<<<<
 *                 self.physical_type == other.physical_type and
 *                 self.num_values == other.num_values and
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_file_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_file_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 380, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 380, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":381
 *         return (self.file_offset == other.file_offset and
 *                 self.file_path == other.file_path and
 *                 self.physical_type == other.physical_type and             # <<<<<<<<<<<<<<
 *                 self.num_values == other.num_values and
 *                 self.path_in_schema == other.path_in_schema and
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 381, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 381, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 381, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":382
 *                 self.file_path == other.file_path and
 *                 self.physical_type == other.physical_type and
 *                 self.num_values == other.num_values and             # <<<<<<<<<<<<<<
 *                 self.path_in_schema == other.path_in_schema and
 *                 self.is_stats_set == other.is_stats_set and
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_values); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_num_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 382, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 382, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":383
 *                 self.physical_type == other.physical_type and
 *                 self.num_values == other.num_values and
 *                 self.path_in_schema == other.path_in_schema and             # <<<<<<<<<<<<<<
 *                 self.is_stats_set == other.is_stats_set and
 *                 self.statistics == other.statistics and
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_path_in_schema); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_path_in_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 383, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":384
 *                 self.num_values == other.num_values and
 *                 self.path_in_schema == other.path_in_schema and
 *                 self.is_stats_set == other.is_stats_set and             # <<<<<<<<<<<<<<
 *                 self.statistics == other.statistics and
 *                 self.compression == other.compression and
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_is_stats_set); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_is_stats_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 384, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":385
 *                 self.path_in_schema == other.path_in_schema and
 *                 self.is_stats_set == other.is_stats_set and
 *                 self.statistics == other.statistics and             # <<<<<<<<<<<<<<
 *                 self.compression == other.compression and
 *                 self.encodings == other.encodings and
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_statistics); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_statistics); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 385, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":386
 *                 self.is_stats_set == other.is_stats_set and
 *                 self.statistics == other.statistics and
 *                 self.compression == other.compression and             # <<<<<<<<<<<<<<
 *                 self.encodings == other.encodings and
 *                 self.has_dictionary_page == other.has_dictionary_page and
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_compression); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_compression); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 386, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 386, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":387
 *                 self.statistics == other.statistics and
 *                 self.compression == other.compression and
 *                 self.encodings == other.encodings and             # <<<<<<<<<<<<<<
 *                 self.has_dictionary_page == other.has_dictionary_page and
 *                 self.dictionary_page_offset == other.dictionary_page_offset and
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_encodings); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_encodings); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 387, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 387, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 387, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":388
 *                 self.compression == other.compression and
 *                 self.encodings == other.encodings and
 *                 self.has_dictionary_page == other.has_dictionary_page and             # <<<<<<<<<<<<<<
 *                 self.dictionary_page_offset == other.dictionary_page_offset and
 *                 self.data_page_offset == other.data_page_offset and
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_dictionary_page); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_has_dictionary_page); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 388, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 388, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":389
 *                 self.encodings == other.encodings and
 *                 self.has_dictionary_page == other.has_dictionary_page and
 *                 self.dictionary_page_offset == other.dictionary_page_offset and             # <<<<<<<<<<<<<<
 *                 self.data_page_offset == other.data_page_offset and
 *                 self.total_compressed_size == other.total_compressed_size and
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_dictionary_page_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_dictionary_page_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 389, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 389, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":390
 *                 self.has_dictionary_page == other.has_dictionary_page and
 *                 self.dictionary_page_offset == other.dictionary_page_offset and
 *                 self.data_page_offset == other.data_page_offset and             # <<<<<<<<<<<<<<
 *                 self.total_compressed_size == other.total_compressed_size and
 *                 self.total_uncompressed_size == other.total_uncompressed_size)
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_data_page_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_data_page_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 390, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 390, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":391
 *                 self.dictionary_page_offset == other.dictionary_page_offset and
 *                 self.data_page_offset == other.data_page_offset and
 *                 self.total_compressed_size == other.total_compressed_size and             # <<<<<<<<<<<<<<
 *                 self.total_uncompressed_size == other.total_uncompressed_size)
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_compressed_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_total_compressed_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 391, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 391, __pyx_L1_error)
  if (__pyx_t_5) {
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L3_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":392
 *                 self.data_page_offset == other.data_page_offset and
 *                 self.total_compressed_size == other.total_compressed_size and
 *                 self.total_uncompressed_size == other.total_uncompressed_size)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_uncompressed_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_total_uncompressed_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_1 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":377
 *             return NotImplemented
 * 
 *     def equals(self, ColumnChunkMetaData other):             # <<<<<<<<<<<<<<
 *         # TODO(kszucs): implement native Equals method for CColumnChunkMetaData
 *         return (self.file_offset == other.file_offset and
 */

  /* 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_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.equals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":395
 * 
 *     @property
 *     def file_offset(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.file_offset()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11file_offset_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11file_offset_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_11file_offset___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":396
 *     @property
 *     def file_offset(self):
 *         return self.metadata.file_offset()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->file_offset()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":395
 * 
 *     @property
 *     def file_offset(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.file_offset()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.file_offset.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":399
 * 
 *     @property
 *     def file_path(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.metadata.file_path())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9file_path_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9file_path_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_9file_path___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_9file_path___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  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;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":400
 *     @property
 *     def file_path(self):
 *         return frombytes(self.metadata.file_path())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->metadata->file_path()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_1)) __PYX_ERR(0, 400, __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;

  /* "pyarrow/_parquet.pyx":399
 * 
 *     @property
 *     def file_path(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.metadata.file_path())
 * 
 */

  /* 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_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.file_path.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":403
 * 
 *     @property
 *     def physical_type(self):             # <<<<<<<<<<<<<<
 *         return physical_type_name_from_enum(self.metadata.type())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_13physical_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_13physical_type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_13physical_type___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":404
 *     @property
 *     def physical_type(self):
 *         return physical_type_name_from_enum(self.metadata.type())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_physical_type_name_from_enum(__pyx_v_self->metadata->type()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":403
 * 
 *     @property
 *     def physical_type(self):             # <<<<<<<<<<<<<<
 *         return physical_type_name_from_enum(self.metadata.type())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.physical_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":407
 * 
 *     @property
 *     def num_values(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.num_values()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_10num_values_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_10num_values_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10num_values___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":408
 *     @property
 *     def num_values(self):
 *         return self.metadata.num_values()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->num_values()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":407
 * 
 *     @property
 *     def num_values(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.num_values()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.num_values.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":411
 * 
 *     @property
 *     def path_in_schema(self):             # <<<<<<<<<<<<<<
 *         path = self.metadata.path_in_schema().get().ToDotString()
 *         return frombytes(path)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_14path_in_schema_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_14path_in_schema_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_14path_in_schema___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_14path_in_schema___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  std::string __pyx_v_path;
  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;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":412
 *     @property
 *     def path_in_schema(self):
 *         path = self.metadata.path_in_schema().get().ToDotString()             # <<<<<<<<<<<<<<
 *         return frombytes(path)
 * 
 */
  __pyx_v_path = __pyx_v_self->metadata->path_in_schema().get()->ToDotString();

  /* "pyarrow/_parquet.pyx":413
 *     def path_in_schema(self):
 *         path = self.metadata.path_in_schema().get().ToDotString()
 *         return frombytes(path)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_1)) __PYX_ERR(0, 413, __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;

  /* "pyarrow/_parquet.pyx":411
 * 
 *     @property
 *     def path_in_schema(self):             # <<<<<<<<<<<<<<
 *         path = self.metadata.path_in_schema().get().ToDotString()
 *         return frombytes(path)
 */

  /* 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_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.path_in_schema.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":416
 * 
 *     @property
 *     def is_stats_set(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.is_stats_set()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_12is_stats_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_12is_stats_set_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_12is_stats_set___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":417
 *     @property
 *     def is_stats_set(self):
 *         return self.metadata.is_stats_set()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->metadata->is_stats_set()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":416
 * 
 *     @property
 *     def is_stats_set(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.is_stats_set()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.is_stats_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":420
 * 
 *     @property
 *     def statistics(self):             # <<<<<<<<<<<<<<
 *         if not self.metadata.is_stats_set():
 *             return None
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_10statistics_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_10statistics_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10statistics___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10statistics___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  struct __pyx_obj_7pyarrow_8_parquet_Statistics *__pyx_v_statistics = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":421
 *     @property
 *     def statistics(self):
 *         if not self.metadata.is_stats_set():             # <<<<<<<<<<<<<<
 *             return None
 *         statistics = Statistics()
 */
  __pyx_t_1 = ((!(__pyx_v_self->metadata->is_stats_set() != 0)) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":422
 *     def statistics(self):
 *         if not self.metadata.is_stats_set():
 *             return None             # <<<<<<<<<<<<<<
 *         statistics = Statistics()
 *         statistics.init(self.metadata.statistics(), self)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":421
 *     @property
 *     def statistics(self):
 *         if not self.metadata.is_stats_set():             # <<<<<<<<<<<<<<
 *             return None
 *         statistics = Statistics()
 */
  }

  /* "pyarrow/_parquet.pyx":423
 *         if not self.metadata.is_stats_set():
 *             return None
 *         statistics = Statistics()             # <<<<<<<<<<<<<<
 *         statistics.init(self.metadata.statistics(), self)
 *         return statistics
 */
  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_Statistics)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_statistics = ((struct __pyx_obj_7pyarrow_8_parquet_Statistics *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":424
 *             return None
 *         statistics = Statistics()
 *         statistics.init(self.metadata.statistics(), self)             # <<<<<<<<<<<<<<
 *         return statistics
 * 
 */
  __pyx_t_2 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_Statistics *)__pyx_v_statistics->__pyx_vtab)->init(__pyx_v_statistics, __pyx_v_self->metadata->statistics(), __pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":425
 *         statistics = Statistics()
 *         statistics.init(self.metadata.statistics(), self)
 *         return statistics             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_statistics));
  __pyx_r = ((PyObject *)__pyx_v_statistics);
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":420
 * 
 *     @property
 *     def statistics(self):             # <<<<<<<<<<<<<<
 *         if not self.metadata.is_stats_set():
 *             return None
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.statistics.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_statistics);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":428
 * 
 *     @property
 *     def compression(self):             # <<<<<<<<<<<<<<
 *         return compression_name_from_enum(self.metadata.compression())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11compression_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11compression_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_11compression___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":429
 *     @property
 *     def compression(self):
 *         return compression_name_from_enum(self.metadata.compression())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_compression_name_from_enum(__pyx_v_self->metadata->compression()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":428
 * 
 *     @property
 *     def compression(self):             # <<<<<<<<<<<<<<
 *         return compression_name_from_enum(self.metadata.compression())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.compression.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":432
 * 
 *     @property
 *     def encodings(self):             # <<<<<<<<<<<<<<
 *         return tuple(map(encoding_name_from_enum, self.metadata.encodings()))
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9encodings_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9encodings_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_9encodings___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_9encodings___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__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);

  /* "pyarrow/_parquet.pyx":433
 *     @property
 *     def encodings(self):
 *         return tuple(map(encoding_name_from_enum, self.metadata.encodings()))             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_CFunc_object____ParquetEncoding___to_py(__pyx_f_7pyarrow_8_parquet_encoding_name_from_enum); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type(__pyx_v_self->metadata->encodings()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 433, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 433, __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_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 433, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 433, __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;

  /* "pyarrow/_parquet.pyx":432
 * 
 *     @property
 *     def encodings(self):             # <<<<<<<<<<<<<<
 *         return tuple(map(encoding_name_from_enum, self.metadata.encodings()))
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.encodings.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":436
 * 
 *     @property
 *     def has_dictionary_page(self):             # <<<<<<<<<<<<<<
 *         return bool(self.metadata.has_dictionary_page())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_19has_dictionary_page_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_19has_dictionary_page_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_19has_dictionary_page___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_19has_dictionary_page___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":437
 *     @property
 *     def has_dictionary_page(self):
 *         return bool(self.metadata.has_dictionary_page())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->has_dictionary_page()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyBool_FromLong((!(!__pyx_t_2))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":436
 * 
 *     @property
 *     def has_dictionary_page(self):             # <<<<<<<<<<<<<<
 *         return bool(self.metadata.has_dictionary_page())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.has_dictionary_page.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":440
 * 
 *     @property
 *     def dictionary_page_offset(self):             # <<<<<<<<<<<<<<
 *         if self.has_dictionary_page:
 *             return self.metadata.dictionary_page_offset()
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_22dictionary_page_offset_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_22dictionary_page_offset_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_22dictionary_page_offset___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_22dictionary_page_offset___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":441
 *     @property
 *     def dictionary_page_offset(self):
 *         if self.has_dictionary_page:             # <<<<<<<<<<<<<<
 *             return self.metadata.dictionary_page_offset()
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_has_dictionary_page); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":442
 *     def dictionary_page_offset(self):
 *         if self.has_dictionary_page:
 *             return self.metadata.dictionary_page_offset()             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->dictionary_page_offset()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":441
 *     @property
 *     def dictionary_page_offset(self):
 *         if self.has_dictionary_page:             # <<<<<<<<<<<<<<
 *             return self.metadata.dictionary_page_offset()
 *         else:
 */
  }

  /* "pyarrow/_parquet.pyx":444
 *             return self.metadata.dictionary_page_offset()
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":440
 * 
 *     @property
 *     def dictionary_page_offset(self):             # <<<<<<<<<<<<<<
 *         if self.has_dictionary_page:
 *             return self.metadata.dictionary_page_offset()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.dictionary_page_offset.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":447
 * 
 *     @property
 *     def data_page_offset(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.data_page_offset()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_16data_page_offset_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_16data_page_offset_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_16data_page_offset___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":448
 *     @property
 *     def data_page_offset(self):
 *         return self.metadata.data_page_offset()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->data_page_offset()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 448, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":447
 * 
 *     @property
 *     def data_page_offset(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.data_page_offset()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.data_page_offset.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":451
 * 
 *     @property
 *     def has_index_page(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError('not supported in parquet-cpp')
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_14has_index_page_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_14has_index_page_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_14has_index_page___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_14has_index_page___get__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":452
 *     @property
 *     def has_index_page(self):
 *         raise NotImplementedError('not supported in parquet-cpp')             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 452, __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(0, 452, __pyx_L1_error)

  /* "pyarrow/_parquet.pyx":451
 * 
 *     @property
 *     def has_index_page(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError('not supported in parquet-cpp')
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.has_index_page.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":455
 * 
 *     @property
 *     def index_page_offset(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError("parquet-cpp doesn't return valid values")
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_17index_page_offset_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_17index_page_offset_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_17index_page_offset___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_17index_page_offset___get__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":456
 *     @property
 *     def index_page_offset(self):
 *         raise NotImplementedError("parquet-cpp doesn't return valid values")             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_NotImplementedError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __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(0, 456, __pyx_L1_error)

  /* "pyarrow/_parquet.pyx":455
 * 
 *     @property
 *     def index_page_offset(self):             # <<<<<<<<<<<<<<
 *         raise NotImplementedError("parquet-cpp doesn't return valid values")
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.index_page_offset.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":459
 * 
 *     @property
 *     def total_compressed_size(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.total_compressed_size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_21total_compressed_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_21total_compressed_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_21total_compressed_size___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":460
 *     @property
 *     def total_compressed_size(self):
 *         return self.metadata.total_compressed_size()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->total_compressed_size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":459
 * 
 *     @property
 *     def total_compressed_size(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.total_compressed_size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.total_compressed_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":463
 * 
 *     @property
 *     def total_uncompressed_size(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.total_uncompressed_size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_23total_uncompressed_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_23total_uncompressed_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_23total_uncompressed_size___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":464
 *     @property
 *     def total_uncompressed_size(self):
 *         return self.metadata.total_uncompressed_size()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->total_uncompressed_size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":463
 * 
 *     @property
 *     def total_uncompressed_size(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.total_uncompressed_size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.total_uncompressed_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_10__reduce_cython__[] = "ColumnChunkMetaData.__reduce_cython__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10__reduce_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __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(1, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_12__setstate_cython__[] = "ColumnChunkMetaData.__setstate_cython__(self, __pyx_state)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_12__setstate_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_19ColumnChunkMetaData_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __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(1, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnChunkMetaData.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":474
 *         FileMetaData parent
 * 
 *     def __cinit__(self, FileMetaData parent, int index):             # <<<<<<<<<<<<<<
 *         if index < 0 or index >= parent.num_row_groups:
 *             raise IndexError('{0} out of bounds'.format(index))
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_parent = 0;
  int __pyx_v_index;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_parent,&__pyx_n_s_index,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_parent)) != 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_index)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(0, 474, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 474, __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_parent = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)values[0]);
    __pyx_v_index = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 474, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 474, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parent), __pyx_ptype_7pyarrow_8_parquet_FileMetaData, 1, "parent", 0))) __PYX_ERR(0, 474, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self), __pyx_v_parent, __pyx_v_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData___cinit__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_parent, int __pyx_v_index) {
  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;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyarrow/_parquet.pyx":475
 * 
 *     def __cinit__(self, FileMetaData parent, int index):
 *         if index < 0 or index >= parent.num_row_groups:             # <<<<<<<<<<<<<<
 *             raise IndexError('{0} out of bounds'.format(index))
 *         self.up_metadata = parent._metadata.RowGroup(index)
 */
  __pyx_t_2 = ((__pyx_v_index < 0) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parent), __pyx_n_s_num_row_groups); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 475, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 475, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "pyarrow/_parquet.pyx":476
 *     def __cinit__(self, FileMetaData parent, int index):
 *         if index < 0 or index >= parent.num_row_groups:
 *             raise IndexError('{0} out of bounds'.format(index))             # <<<<<<<<<<<<<<
 *         self.up_metadata = parent._metadata.RowGroup(index)
 *         self.metadata = self.up_metadata.get()
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_out_of_bounds, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 476, __pyx_L1_error)

    /* "pyarrow/_parquet.pyx":475
 * 
 *     def __cinit__(self, FileMetaData parent, int index):
 *         if index < 0 or index >= parent.num_row_groups:             # <<<<<<<<<<<<<<
 *             raise IndexError('{0} out of bounds'.format(index))
 *         self.up_metadata = parent._metadata.RowGroup(index)
 */
  }

  /* "pyarrow/_parquet.pyx":477
 *         if index < 0 or index >= parent.num_row_groups:
 *             raise IndexError('{0} out of bounds'.format(index))
 *         self.up_metadata = parent._metadata.RowGroup(index)             # <<<<<<<<<<<<<<
 *         self.metadata = self.up_metadata.get()
 *         self.parent = parent
 */
  __pyx_v_self->up_metadata = __pyx_v_parent->_metadata->RowGroup(__pyx_v_index);

  /* "pyarrow/_parquet.pyx":478
 *             raise IndexError('{0} out of bounds'.format(index))
 *         self.up_metadata = parent._metadata.RowGroup(index)
 *         self.metadata = self.up_metadata.get()             # <<<<<<<<<<<<<<
 *         self.parent = parent
 *         self.index = index
 */
  __pyx_v_self->metadata = __pyx_v_self->up_metadata.get();

  /* "pyarrow/_parquet.pyx":479
 *         self.up_metadata = parent._metadata.RowGroup(index)
 *         self.metadata = self.up_metadata.get()
 *         self.parent = parent             # <<<<<<<<<<<<<<
 *         self.index = index
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_parent));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_parent));
  __Pyx_GOTREF(__pyx_v_self->parent);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->parent));
  __pyx_v_self->parent = __pyx_v_parent;

  /* "pyarrow/_parquet.pyx":480
 *         self.metadata = self.up_metadata.get()
 *         self.parent = parent
 *         self.index = index             # <<<<<<<<<<<<<<
 * 
 *     def __reduce__(self):
 */
  __pyx_v_self->index = __pyx_v_index;

  /* "pyarrow/_parquet.pyx":474
 *         FileMetaData parent
 * 
 *     def __cinit__(self, FileMetaData parent, int index):             # <<<<<<<<<<<<<<
 *         if index < 0 or index >= parent.num_row_groups:
 *             raise IndexError('{0} out of bounds'.format(index))
 */

  /* 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_6);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":482
 *         self.index = index
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         return RowGroupMetaData, (self.parent, self.index)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_3__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_2__reduce__[] = "RowGroupMetaData.__reduce__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_3__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_2__reduce__(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_2__reduce__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyarrow/_parquet.pyx":483
 * 
 *     def __reduce__(self):
 *         return RowGroupMetaData, (self.parent, self.index)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->parent));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->parent));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self->parent));
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_RowGroupMetaData));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_RowGroupMetaData));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_ptype_7pyarrow_8_parquet_RowGroupMetaData));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":482
 *         self.index = index
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         return RowGroupMetaData, (self.parent, self.index)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":485
 *         return RowGroupMetaData, (self.parent, self.index)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_5__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_4__eq__(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_4__eq__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pyarrow/_parquet.pyx":486
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":487
 *     def __eq__(self, other):
 *         try:
 *             return self.equals(other)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_equals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 487, __pyx_L3_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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_other) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_other);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 487, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;

      /* "pyarrow/_parquet.pyx":486
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    }
    __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;

    /* "pyarrow/_parquet.pyx":488
 *         try:
 *             return self.equals(other)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 * 
 */
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 488, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":489
 *             return self.equals(other)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *     def equals(self, RowGroupMetaData other):
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_builtin_NotImplemented);
      __pyx_r = __pyx_builtin_NotImplemented;
      __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;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":486
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    __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_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;
  }

  /* "pyarrow/_parquet.pyx":485
 *         return RowGroupMetaData, (self.parent, self.index)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":491
 *             return NotImplemented
 * 
 *     def equals(self, RowGroupMetaData other):             # <<<<<<<<<<<<<<
 *         if not (self.num_columns == other.num_columns and
 *                 self.num_rows == other.num_rows and
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_7equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_6equals[] = "RowGroupMetaData.equals(self, RowGroupMetaData other)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_7equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equals (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_7pyarrow_8_parquet_RowGroupMetaData, 1, "other", 0))) __PYX_ERR(0, 491, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_6equals(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_6equals(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_other) {
  PyObject *__pyx_v_i = NULL;
  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;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannySetupContext("equals", 0);

  /* "pyarrow/_parquet.pyx":492
 * 
 *     def equals(self, RowGroupMetaData other):
 *         if not (self.num_columns == other.num_columns and             # <<<<<<<<<<<<<<
 *                 self.num_rows == other.num_rows and
 *                 self.total_byte_size == other.total_byte_size):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 492, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":493
 *     def equals(self, RowGroupMetaData other):
 *         if not (self.num_columns == other.num_columns and
 *                 self.num_rows == other.num_rows and             # <<<<<<<<<<<<<<
 *                 self.total_byte_size == other.total_byte_size):
 *             return False
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_rows); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_num_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }

  /* "pyarrow/_parquet.pyx":494
 *         if not (self.num_columns == other.num_columns and
 *                 self.num_rows == other.num_rows and
 *                 self.total_byte_size == other.total_byte_size):             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_byte_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_total_byte_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 494, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;

  /* "pyarrow/_parquet.pyx":492
 * 
 *     def equals(self, RowGroupMetaData other):
 *         if not (self.num_columns == other.num_columns and             # <<<<<<<<<<<<<<
 *                 self.num_rows == other.num_rows and
 *                 self.total_byte_size == other.total_byte_size):
 */
  __pyx_t_5 = ((!__pyx_t_1) != 0);
  if (__pyx_t_5) {

    /* "pyarrow/_parquet.pyx":495
 *                 self.num_rows == other.num_rows and
 *                 self.total_byte_size == other.total_byte_size):
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         for i in range(self.num_columns):
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":492
 * 
 *     def equals(self, RowGroupMetaData other):
 *         if not (self.num_columns == other.num_columns and             # <<<<<<<<<<<<<<
 *                 self.num_rows == other.num_rows and
 *                 self.total_byte_size == other.total_byte_size):
 */
  }

  /* "pyarrow/_parquet.pyx":497
 *             return False
 * 
 *         for i in range(self.num_columns):             # <<<<<<<<<<<<<<
 *             if self.column(i) != other.column(i):
 *                 return False
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 497, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 497, __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(0, 497, __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(0, 497, __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(0, 497, __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(0, 497, __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(0, 497, __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(0, 497, __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(0, 497, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyarrow/_parquet.pyx":498
 * 
 *         for i in range(self.num_columns):
 *             if self.column(i) != other.column(i):             # <<<<<<<<<<<<<<
 *                 return False
 * 
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_column); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_v_i) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_i);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_other), __pyx_n_s_column); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_2 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_v_i) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_i);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 498, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 498, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_5) {

      /* "pyarrow/_parquet.pyx":499
 *         for i in range(self.num_columns):
 *             if self.column(i) != other.column(i):
 *                 return False             # <<<<<<<<<<<<<<
 * 
 *         return True
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_False);
      __pyx_r = Py_False;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L0;

      /* "pyarrow/_parquet.pyx":498
 * 
 *         for i in range(self.num_columns):
 *             if self.column(i) != other.column(i):             # <<<<<<<<<<<<<<
 *                 return False
 * 
 */
    }

    /* "pyarrow/_parquet.pyx":497
 *             return False
 * 
 *         for i in range(self.num_columns):             # <<<<<<<<<<<<<<
 *             if self.column(i) != other.column(i):
 *                 return False
 */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":501
 *                 return False
 * 
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     def column(self, int i):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_True);
  __pyx_r = Py_True;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":491
 *             return NotImplemented
 * 
 *     def equals(self, RowGroupMetaData other):             # <<<<<<<<<<<<<<
 *         if not (self.num_columns == other.num_columns and
 *                 self.num_rows == other.num_rows and
 */

  /* 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.equals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":503
 *         return True
 * 
 *     def column(self, int i):             # <<<<<<<<<<<<<<
 *         if i < 0 or i >= self.num_columns:
 *             raise IndexError('{0} out of bounds'.format(i))
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_9column(PyObject *__pyx_v_self, PyObject *__pyx_arg_i); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_8column[] = "RowGroupMetaData.column(self, int i)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_9column(PyObject *__pyx_v_self, PyObject *__pyx_arg_i) {
  int __pyx_v_i;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("column (wrapper)", 0);
  assert(__pyx_arg_i); {
    __pyx_v_i = __Pyx_PyInt_As_int(__pyx_arg_i); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 503, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_8column(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self), ((int)__pyx_v_i));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_8column(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self, int __pyx_v_i) {
  struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *__pyx_v_chunk = NULL;
  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;
  __Pyx_RefNannySetupContext("column", 0);

  /* "pyarrow/_parquet.pyx":504
 * 
 *     def column(self, int i):
 *         if i < 0 or i >= self.num_columns:             # <<<<<<<<<<<<<<
 *             raise IndexError('{0} out of bounds'.format(i))
 *         chunk = ColumnChunkMetaData()
 */
  __pyx_t_2 = ((__pyx_v_i < 0) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 504, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 504, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "pyarrow/_parquet.pyx":505
 *     def column(self, int i):
 *         if i < 0 or i >= self.num_columns:
 *             raise IndexError('{0} out of bounds'.format(i))             # <<<<<<<<<<<<<<
 *         chunk = ColumnChunkMetaData()
 *         chunk.init(self, i)
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_out_of_bounds, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 505, __pyx_L1_error)

    /* "pyarrow/_parquet.pyx":504
 * 
 *     def column(self, int i):
 *         if i < 0 or i >= self.num_columns:             # <<<<<<<<<<<<<<
 *             raise IndexError('{0} out of bounds'.format(i))
 *         chunk = ColumnChunkMetaData()
 */
  }

  /* "pyarrow/_parquet.pyx":506
 *         if i < 0 or i >= self.num_columns:
 *             raise IndexError('{0} out of bounds'.format(i))
 *         chunk = ColumnChunkMetaData()             # <<<<<<<<<<<<<<
 *         chunk.init(self, i)
 *         return chunk
 */
  __pyx_t_4 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ColumnChunkMetaData)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_chunk = ((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":507
 *             raise IndexError('{0} out of bounds'.format(i))
 *         chunk = ColumnChunkMetaData()
 *         chunk.init(self, i)             # <<<<<<<<<<<<<<
 *         return chunk
 * 
 */
  __pyx_t_4 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ColumnChunkMetaData *)__pyx_v_chunk->__pyx_vtab)->init(__pyx_v_chunk, __pyx_v_self, __pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":508
 *         chunk = ColumnChunkMetaData()
 *         chunk.init(self, i)
 *         return chunk             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_chunk));
  __pyx_r = ((PyObject *)__pyx_v_chunk);
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":503
 *         return True
 * 
 *     def column(self, int i):             # <<<<<<<<<<<<<<
 *         if i < 0 or i >= self.num_columns:
 *             raise IndexError('{0} out of bounds'.format(i))
 */

  /* 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_6);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_chunk);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":510
 *         return chunk
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return """{0}
 *   num_columns: {1}
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_11__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_11__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_10__repr__(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_10__repr__(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self) {
  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;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyarrow/_parquet.pyx":511
 * 
 *     def __repr__(self):
 *         return """{0}             # <<<<<<<<<<<<<<
 *   num_columns: {1}
 *   num_rows: {2}
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":514
 *   num_columns: {1}
 *   num_rows: {2}
 *   total_byte_size: {3}""".format(object.__repr__(self),             # <<<<<<<<<<<<<<
 *                                  self.num_columns,
 *                                  self.num_rows,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_num_columns_1_num_rows_2_tota, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_n_s_repr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 514, __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_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self));
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":515
 *   num_rows: {2}
 *   total_byte_size: {3}""".format(object.__repr__(self),
 *                                  self.num_columns,             # <<<<<<<<<<<<<<
 *                                  self.num_rows,
 *                                  self.total_byte_size)
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "pyarrow/_parquet.pyx":516
 *   total_byte_size: {3}""".format(object.__repr__(self),
 *                                  self.num_columns,
 *                                  self.num_rows,             # <<<<<<<<<<<<<<
 *                                  self.total_byte_size)
 * 
 */
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_rows); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pyarrow/_parquet.pyx":517
 *                                  self.num_columns,
 *                                  self.num_rows,
 *                                  self.total_byte_size)             # <<<<<<<<<<<<<<
 * 
 *     def to_dict(self):
 */
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_byte_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_7, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(4+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 514, __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_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_8, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_8, __pyx_t_6);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_6 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 514, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":510
 *         return chunk
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return """{0}
 *   num_columns: {1}
 */

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":519
 *                                  self.total_byte_size)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         columns = []
 *         d = dict(
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_13to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_12to_dict[] = "RowGroupMetaData.to_dict(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_13to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_12to_dict(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_12to_dict(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *__pyx_v_self) {
  PyObject *__pyx_v_columns = NULL;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  __Pyx_RefNannySetupContext("to_dict", 0);

  /* "pyarrow/_parquet.pyx":520
 * 
 *     def to_dict(self):
 *         columns = []             # <<<<<<<<<<<<<<
 *         d = dict(
 *             num_columns=self.num_columns,
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_columns = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":522
 *         columns = []
 *         d = dict(
 *             num_columns=self.num_columns,             # <<<<<<<<<<<<<<
 *             num_rows=self.num_rows,
 *             total_byte_size=self.total_byte_size,
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_columns, __pyx_t_2) < 0) __PYX_ERR(0, 522, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":523
 *         d = dict(
 *             num_columns=self.num_columns,
 *             num_rows=self.num_rows,             # <<<<<<<<<<<<<<
 *             total_byte_size=self.total_byte_size,
 *             columns=columns,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_rows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 523, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_rows, __pyx_t_2) < 0) __PYX_ERR(0, 522, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":524
 *             num_columns=self.num_columns,
 *             num_rows=self.num_rows,
 *             total_byte_size=self.total_byte_size,             # <<<<<<<<<<<<<<
 *             columns=columns,
 *         )
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_byte_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 524, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_total_byte_size, __pyx_t_2) < 0) __PYX_ERR(0, 522, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":525
 *             num_rows=self.num_rows,
 *             total_byte_size=self.total_byte_size,
 *             columns=columns,             # <<<<<<<<<<<<<<
 *         )
 *         for i in range(self.num_columns):
 */
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_columns, __pyx_v_columns) < 0) __PYX_ERR(0, 522, __pyx_L1_error)
  __pyx_v_d = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":527
 *             columns=columns,
 *         )
 *         for i in range(self.num_columns):             # <<<<<<<<<<<<<<
 *             columns.append(self.column(i).to_dict())
 *         return d
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 527, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 527, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 527, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 527, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 527, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_4(__pyx_t_1);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 527, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":528
 *         )
 *         for i in range(self.num_columns):
 *             columns.append(self.column(i).to_dict())             # <<<<<<<<<<<<<<
 *         return d
 * 
 */
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_column); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 528, __pyx_L1_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_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_i) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_i);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_to_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_columns, __pyx_t_2); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":527
 *             columns=columns,
 *         )
 *         for i in range(self.num_columns):             # <<<<<<<<<<<<<<
 *             columns.append(self.column(i).to_dict())
 *         return d
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":529
 *         for i in range(self.num_columns):
 *             columns.append(self.column(i).to_dict())
 *         return d             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_d);
  __pyx_r = __pyx_v_d;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":519
 *                                  self.total_byte_size)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         columns = []
 *         d = dict(
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.to_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_columns);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":532
 * 
 *     @property
 *     def num_columns(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.num_columns()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_11num_columns_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_11num_columns_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_11num_columns___get__(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":533
 *     @property
 *     def num_columns(self):
 *         return self.metadata.num_columns()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->metadata->num_columns()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":532
 * 
 *     @property
 *     def num_columns(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.num_columns()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.num_columns.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":536
 * 
 *     @property
 *     def num_rows(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.num_rows()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_8num_rows_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_8num_rows_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_8num_rows___get__(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":537
 *     @property
 *     def num_rows(self):
 *         return self.metadata.num_rows()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->num_rows()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":536
 * 
 *     @property
 *     def num_rows(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.num_rows()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.num_rows.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":540
 * 
 *     @property
 *     def total_byte_size(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.total_byte_size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_15total_byte_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_15total_byte_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_16RowGroupMetaData_15total_byte_size___get__(((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":541
 *     @property
 *     def total_byte_size(self):
 *         return self.metadata.total_byte_size()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->metadata->total_byte_size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":540
 * 
 *     @property
 *     def total_byte_size(self):             # <<<<<<<<<<<<<<
 *         return self.metadata.total_byte_size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.RowGroupMetaData.total_byte_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":544
 * 
 * 
 * def _reconstruct_filemetadata(Buffer serialized):             # <<<<<<<<<<<<<<
 *     cdef:
 *         FileMetaData metadata = FileMetaData.__new__(FileMetaData)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_1_reconstruct_filemetadata(PyObject *__pyx_self, PyObject *__pyx_v_serialized); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet__reconstruct_filemetadata[] = "_reconstruct_filemetadata(Buffer serialized)";
static PyMethodDef __pyx_mdef_7pyarrow_8_parquet_1_reconstruct_filemetadata = {"_reconstruct_filemetadata", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_1_reconstruct_filemetadata, METH_O, __pyx_doc_7pyarrow_8_parquet__reconstruct_filemetadata};
static PyObject *__pyx_pw_7pyarrow_8_parquet_1_reconstruct_filemetadata(PyObject *__pyx_self, PyObject *__pyx_v_serialized) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_reconstruct_filemetadata (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_serialized), __pyx_ptype_7pyarrow_3lib_Buffer, 1, "serialized", 0))) __PYX_ERR(0, 544, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet__reconstruct_filemetadata(__pyx_self, ((struct __pyx_obj_7pyarrow_3lib_Buffer *)__pyx_v_serialized));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet__reconstruct_filemetadata(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_7pyarrow_3lib_Buffer *__pyx_v_serialized) {
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_metadata = 0;
   arrow::Buffer *__pyx_v_buffer;
  uint32_t __pyx_v_metadata_len;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_reconstruct_filemetadata", 0);

  /* "pyarrow/_parquet.pyx":546
 * def _reconstruct_filemetadata(Buffer serialized):
 *     cdef:
 *         FileMetaData metadata = FileMetaData.__new__(FileMetaData)             # <<<<<<<<<<<<<<
 *         CBuffer *buffer = serialized.buffer.get()
 *         uint32_t metadata_len = <uint32_t>buffer.size()
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_parquet_FileMetaData(((PyTypeObject *)__pyx_ptype_7pyarrow_8_parquet_FileMetaData), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_metadata = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":547
 *     cdef:
 *         FileMetaData metadata = FileMetaData.__new__(FileMetaData)
 *         CBuffer *buffer = serialized.buffer.get()             # <<<<<<<<<<<<<<
 *         uint32_t metadata_len = <uint32_t>buffer.size()
 * 
 */
  __pyx_v_buffer = __pyx_v_serialized->buffer.get();

  /* "pyarrow/_parquet.pyx":548
 *         FileMetaData metadata = FileMetaData.__new__(FileMetaData)
 *         CBuffer *buffer = serialized.buffer.get()
 *         uint32_t metadata_len = <uint32_t>buffer.size()             # <<<<<<<<<<<<<<
 * 
 *     metadata.init(CFileMetaData_Make(buffer.data(), &metadata_len))
 */
  __pyx_v_metadata_len = ((uint32_t)__pyx_v_buffer->size());

  /* "pyarrow/_parquet.pyx":550
 *         uint32_t metadata_len = <uint32_t>buffer.size()
 * 
 *     metadata.init(CFileMetaData_Make(buffer.data(), &metadata_len))             # <<<<<<<<<<<<<<
 * 
 *     return metadata
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_FileMetaData *)__pyx_v_metadata->__pyx_vtab)->init(__pyx_v_metadata,  parquet::FileMetaData::Make(__pyx_v_buffer->data(), (&__pyx_v_metadata_len))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":552
 *     metadata.init(CFileMetaData_Make(buffer.data(), &metadata_len))
 * 
 *     return metadata             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_metadata));
  __pyx_r = ((PyObject *)__pyx_v_metadata);
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":544
 * 
 * 
 * def _reconstruct_filemetadata(Buffer serialized):             # <<<<<<<<<<<<<<
 *     cdef:
 *         FileMetaData metadata = FileMetaData.__new__(FileMetaData)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet._reconstruct_filemetadata", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_metadata);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":561
 *         ParquetSchema _schema
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_12FileMetaData_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_12FileMetaData_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_7pyarrow_8_parquet_12FileMetaData___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static int __pyx_pf_7pyarrow_8_parquet_12FileMetaData___cinit__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

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

/* "pyarrow/_parquet.pyx":564
 *         pass
 * 
 *     cdef init(self, const shared_ptr[CFileMetaData]& metadata):             # <<<<<<<<<<<<<<
 *         self.sp_metadata = metadata
 *         self._metadata = metadata.get()
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_12FileMetaData_init(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, std::shared_ptr< parquet::FileMetaData>  const &__pyx_v_metadata) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_parquet.pyx":565
 * 
 *     cdef init(self, const shared_ptr[CFileMetaData]& metadata):
 *         self.sp_metadata = metadata             # <<<<<<<<<<<<<<
 *         self._metadata = metadata.get()
 * 
 */
  __pyx_v_self->sp_metadata = __pyx_v_metadata;

  /* "pyarrow/_parquet.pyx":566
 *     cdef init(self, const shared_ptr[CFileMetaData]& metadata):
 *         self.sp_metadata = metadata
 *         self._metadata = metadata.get()             # <<<<<<<<<<<<<<
 * 
 *     def __reduce__(self):
 */
  __pyx_v_self->_metadata = __pyx_v_metadata.get();

  /* "pyarrow/_parquet.pyx":564
 *         pass
 * 
 *     cdef init(self, const shared_ptr[CFileMetaData]& metadata):             # <<<<<<<<<<<<<<
 *         self.sp_metadata = metadata
 *         self._metadata = metadata.get()
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":568
 *         self._metadata = metadata.get()
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             NativeFile sink = BufferOutputStream()
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_3__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12FileMetaData_2__reduce__[] = "FileMetaData.__reduce__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_3__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_2__reduce__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_2__reduce__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  struct __pyx_obj_7pyarrow_3lib_NativeFile *__pyx_v_sink = 0;
  arrow::io::OutputStream *__pyx_v_c_sink;
  struct __pyx_obj_7pyarrow_3lib_Buffer *__pyx_v_buffer = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  std::shared_ptr<arrow::io::OutputStream>  __pyx_t_4;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyarrow/_parquet.pyx":570
 *     def __reduce__(self):
 *         cdef:
 *             NativeFile sink = BufferOutputStream()             # <<<<<<<<<<<<<<
 *             OutputStream* c_sink = sink.get_output_stream().get()
 *         with nogil:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_BufferOutputStream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  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_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(0, 570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_7pyarrow_3lib_NativeFile))))) __PYX_ERR(0, 570, __pyx_L1_error)
  __pyx_v_sink = ((struct __pyx_obj_7pyarrow_3lib_NativeFile *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":571
 *         cdef:
 *             NativeFile sink = BufferOutputStream()
 *             OutputStream* c_sink = sink.get_output_stream().get()             # <<<<<<<<<<<<<<
 *         with nogil:
 *             self._metadata.WriteTo(c_sink)
 */
  __pyx_t_4 = ((struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile *)__pyx_v_sink->__pyx_vtab)->get_output_stream(__pyx_v_sink); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 571, __pyx_L1_error)
  __pyx_v_c_sink = __pyx_t_4.get();

  /* "pyarrow/_parquet.pyx":572
 *             NativeFile sink = BufferOutputStream()
 *             OutputStream* c_sink = sink.get_output_stream().get()
 *         with nogil:             # <<<<<<<<<<<<<<
 *             self._metadata.WriteTo(c_sink)
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":573
 *             OutputStream* c_sink = sink.get_output_stream().get()
 *         with nogil:
 *             self._metadata.WriteTo(c_sink)             # <<<<<<<<<<<<<<
 * 
 *         cdef Buffer buffer = sink.getvalue()
 */
        __pyx_v_self->_metadata->WriteTo(__pyx_v_c_sink);
      }

      /* "pyarrow/_parquet.pyx":572
 *             NativeFile sink = BufferOutputStream()
 *             OutputStream* c_sink = sink.get_output_stream().get()
 *         with nogil:             # <<<<<<<<<<<<<<
 *             self._metadata.WriteTo(c_sink)
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }

  /* "pyarrow/_parquet.pyx":575
 *             self._metadata.WriteTo(c_sink)
 * 
 *         cdef Buffer buffer = sink.getvalue()             # <<<<<<<<<<<<<<
 *         return _reconstruct_filemetadata, (buffer,)
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_sink), __pyx_n_s_getvalue); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 575, __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(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_7pyarrow_3lib_Buffer))))) __PYX_ERR(0, 575, __pyx_L1_error)
  __pyx_v_buffer = ((struct __pyx_obj_7pyarrow_3lib_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":576
 * 
 *         cdef Buffer buffer = sink.getvalue()
 *         return _reconstruct_filemetadata, (buffer,)             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_reconstruct_filemetadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_buffer));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_buffer));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_buffer));
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 576, __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_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":568
 *         self._metadata = metadata.get()
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             NativeFile sink = BufferOutputStream()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_sink);
  __Pyx_XDECREF((PyObject *)__pyx_v_buffer);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":578
 *         return _reconstruct_filemetadata, (buffer,)
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return """{0}
 *   created_by: {1}
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_5__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_5__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_4__repr__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_4__repr__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  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;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  PyObject *__pyx_t_12 = NULL;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyarrow/_parquet.pyx":579
 * 
 *     def __repr__(self):
 *         return """{0}             # <<<<<<<<<<<<<<
 *   created_by: {1}
 *   num_columns: {2}
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":585
 *   num_row_groups: {4}
 *   format_version: {5}
 *   serialized_size: {6}""".format(object.__repr__(self),             # <<<<<<<<<<<<<<
 *                                  self.created_by, self.num_columns,
 *                                  self.num_rows, self.num_row_groups,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_created_by_1_num_columns_2_nu, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_n_s_repr); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 585, __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_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_self));
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 585, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":586
 *   format_version: {5}
 *   serialized_size: {6}""".format(object.__repr__(self),
 *                                  self.created_by, self.num_columns,             # <<<<<<<<<<<<<<
 *                                  self.num_rows, self.num_row_groups,
 *                                  self.format_version,
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_created_by); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pyarrow/_parquet.pyx":587
 *   serialized_size: {6}""".format(object.__repr__(self),
 *                                  self.created_by, self.num_columns,
 *                                  self.num_rows, self.num_row_groups,             # <<<<<<<<<<<<<<
 *                                  self.format_version,
 *                                  self.serialized_size)
 */
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_rows); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_row_groups); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 587, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "pyarrow/_parquet.pyx":588
 *                                  self.created_by, self.num_columns,
 *                                  self.num_rows, self.num_row_groups,
 *                                  self.format_version,             # <<<<<<<<<<<<<<
 *                                  self.serialized_size)
 * 
 */
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_format_version); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 588, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "pyarrow/_parquet.pyx":589
 *                                  self.num_rows, self.num_row_groups,
 *                                  self.format_version,
 *                                  self.serialized_size)             # <<<<<<<<<<<<<<
 * 
 *     def to_dict(self):
 */
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_serialized_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 589, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = NULL;
  __pyx_t_11 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_11 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[8] = {__pyx_t_10, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 7+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[8] = {__pyx_t_10, __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_11, 7+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 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;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_12 = PyTuple_New(7+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_11, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_12, 4+__pyx_t_11, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_12, 5+__pyx_t_11, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_12, 6+__pyx_t_11, __pyx_t_9);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_6 = 0;
    __pyx_t_7 = 0;
    __pyx_t_8 = 0;
    __pyx_t_9 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":578
 *         return _reconstruct_filemetadata, (buffer,)
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return """{0}
 *   created_by: {1}
 */

  /* 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_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_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":591
 *                                  self.serialized_size)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         row_groups = []
 *         d = dict(
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_7to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12FileMetaData_6to_dict[] = "FileMetaData.to_dict(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_7to_dict(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_dict (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_6to_dict(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_6to_dict(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  PyObject *__pyx_v_row_groups = NULL;
  PyObject *__pyx_v_d = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *(*__pyx_t_4)(PyObject *);
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  __Pyx_RefNannySetupContext("to_dict", 0);

  /* "pyarrow/_parquet.pyx":592
 * 
 *     def to_dict(self):
 *         row_groups = []             # <<<<<<<<<<<<<<
 *         d = dict(
 *             created_by=self.created_by,
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_row_groups = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":594
 *         row_groups = []
 *         d = dict(
 *             created_by=self.created_by,             # <<<<<<<<<<<<<<
 *             num_columns=self.num_columns,
 *             num_rows=self.num_rows,
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_created_by); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_created_by, __pyx_t_2) < 0) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":595
 *         d = dict(
 *             created_by=self.created_by,
 *             num_columns=self.num_columns,             # <<<<<<<<<<<<<<
 *             num_rows=self.num_rows,
 *             num_row_groups=self.num_row_groups,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_columns); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_columns, __pyx_t_2) < 0) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":596
 *             created_by=self.created_by,
 *             num_columns=self.num_columns,
 *             num_rows=self.num_rows,             # <<<<<<<<<<<<<<
 *             num_row_groups=self.num_row_groups,
 *             row_groups=row_groups,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_rows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_rows, __pyx_t_2) < 0) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":597
 *             num_columns=self.num_columns,
 *             num_rows=self.num_rows,
 *             num_row_groups=self.num_row_groups,             # <<<<<<<<<<<<<<
 *             row_groups=row_groups,
 *             format_version=self.format_version,
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_row_groups); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_num_row_groups, __pyx_t_2) < 0) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":598
 *             num_rows=self.num_rows,
 *             num_row_groups=self.num_row_groups,
 *             row_groups=row_groups,             # <<<<<<<<<<<<<<
 *             format_version=self.format_version,
 *             serialized_size=self.serialized_size
 */
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_row_groups, __pyx_v_row_groups) < 0) __PYX_ERR(0, 594, __pyx_L1_error)

  /* "pyarrow/_parquet.pyx":599
 *             num_row_groups=self.num_row_groups,
 *             row_groups=row_groups,
 *             format_version=self.format_version,             # <<<<<<<<<<<<<<
 *             serialized_size=self.serialized_size
 *         )
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_format_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 599, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_format_version, __pyx_t_2) < 0) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":600
 *             row_groups=row_groups,
 *             format_version=self.format_version,
 *             serialized_size=self.serialized_size             # <<<<<<<<<<<<<<
 *         )
 *         for i in range(self.num_row_groups):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_serialized_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_serialized_size, __pyx_t_2) < 0) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_d = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":602
 *             serialized_size=self.serialized_size
 *         )
 *         for i in range(self.num_row_groups):             # <<<<<<<<<<<<<<
 *             row_groups.append(self.row_group(i).to_dict())
 *         return d
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_num_row_groups); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
    __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 602, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  for (;;) {
    if (likely(!__pyx_t_4)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 602, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 602, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      } else {
        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 602, __pyx_L1_error)
        #else
        __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 602, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        #endif
      }
    } else {
      __pyx_t_2 = __pyx_t_4(__pyx_t_1);
      if (unlikely(!__pyx_t_2)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 602, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":603
 *         )
 *         for i in range(self.num_row_groups):
 *             row_groups.append(self.row_group(i).to_dict())             # <<<<<<<<<<<<<<
 *         return d
 * 
 */
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_row_group); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 603, __pyx_L1_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_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_i) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_i);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_to_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(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_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_row_groups, __pyx_t_2); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 603, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":602
 *             serialized_size=self.serialized_size
 *         )
 *         for i in range(self.num_row_groups):             # <<<<<<<<<<<<<<
 *             row_groups.append(self.row_group(i).to_dict())
 *         return d
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":604
 *         for i in range(self.num_row_groups):
 *             row_groups.append(self.row_group(i).to_dict())
 *         return d             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_d);
  __pyx_r = __pyx_v_d;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":591
 *                                  self.serialized_size)
 * 
 *     def to_dict(self):             # <<<<<<<<<<<<<<
 *         row_groups = []
 *         d = dict(
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.to_dict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_row_groups);
  __Pyx_XDECREF(__pyx_v_d);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":606
 *         return d
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_9__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_9__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_8__eq__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_8__eq__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pyarrow/_parquet.pyx":607
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":608
 *     def __eq__(self, other):
 *         try:
 *             return self.equals(other)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_equals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 608, __pyx_L3_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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_other) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_other);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 608, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;

      /* "pyarrow/_parquet.pyx":607
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    }
    __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;

    /* "pyarrow/_parquet.pyx":609
 *         try:
 *             return self.equals(other)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 * 
 */
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 609, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":610
 *             return self.equals(other)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *     def equals(self, FileMetaData other):
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_builtin_NotImplemented);
      __pyx_r = __pyx_builtin_NotImplemented;
      __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;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":607
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    __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_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;
  }

  /* "pyarrow/_parquet.pyx":606
 *         return d
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":612
 *             return NotImplemented
 * 
 *     def equals(self, FileMetaData other):             # <<<<<<<<<<<<<<
 *         # TODO(kszucs): use native method after ARROW-4970 is implemented
 *         for prop in ('schema', 'serialized_size', 'num_columns', 'num_rows',
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_11equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12FileMetaData_10equals[] = "FileMetaData.equals(self, FileMetaData other)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_11equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equals (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_7pyarrow_8_parquet_FileMetaData, 1, "other", 0))) __PYX_ERR(0, 612, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_10equals(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_10equals(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_other) {
  PyObject *__pyx_v_prop = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("equals", 0);

  /* "pyarrow/_parquet.pyx":614
 *     def equals(self, FileMetaData other):
 *         # TODO(kszucs): use native method after ARROW-4970 is implemented
 *         for prop in ('schema', 'serialized_size', 'num_columns', 'num_rows',             # <<<<<<<<<<<<<<
 *                      'num_row_groups', 'format_version', 'created_by',
 *                      'metadata'):
 */
  __pyx_t_1 = __pyx_tuple__11; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= 8) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 614, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_prop, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "pyarrow/_parquet.pyx":617
 *                      'num_row_groups', 'format_version', 'created_by',
 *                      'metadata'):
 *             if getattr(self, prop) != getattr(other, prop):             # <<<<<<<<<<<<<<
 *                 return False
 *         return True
 */
    __pyx_t_3 = __Pyx_GetAttr(((PyObject *)__pyx_v_self), __pyx_v_prop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_GetAttr(((PyObject *)__pyx_v_other), __pyx_v_prop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 617, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_6) {

      /* "pyarrow/_parquet.pyx":618
 *                      'metadata'):
 *             if getattr(self, prop) != getattr(other, prop):
 *                 return False             # <<<<<<<<<<<<<<
 *         return True
 * 
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(Py_False);
      __pyx_r = Py_False;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;

      /* "pyarrow/_parquet.pyx":617
 *                      'num_row_groups', 'format_version', 'created_by',
 *                      'metadata'):
 *             if getattr(self, prop) != getattr(other, prop):             # <<<<<<<<<<<<<<
 *                 return False
 *         return True
 */
    }

    /* "pyarrow/_parquet.pyx":614
 *     def equals(self, FileMetaData other):
 *         # TODO(kszucs): use native method after ARROW-4970 is implemented
 *         for prop in ('schema', 'serialized_size', 'num_columns', 'num_rows',             # <<<<<<<<<<<<<<
 *                      'num_row_groups', 'format_version', 'created_by',
 *                      'metadata'):
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":619
 *             if getattr(self, prop) != getattr(other, prop):
 *                 return False
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_True);
  __pyx_r = Py_True;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":612
 *             return NotImplemented
 * 
 *     def equals(self, FileMetaData other):             # <<<<<<<<<<<<<<
 *         # TODO(kszucs): use native method after ARROW-4970 is implemented
 *         for prop in ('schema', 'serialized_size', 'num_columns', 'num_rows',
 */

  /* 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("pyarrow._parquet.FileMetaData.equals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prop);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":622
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         if self._schema is None:
 *             self._schema = ParquetSchema(self)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_6schema_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_6schema_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_6schema___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_6schema___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":623
 *     @property
 *     def schema(self):
 *         if self._schema is None:             # <<<<<<<<<<<<<<
 *             self._schema = ParquetSchema(self)
 *         return self._schema
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_self->_schema) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":624
 *     def schema(self):
 *         if self._schema is None:
 *             self._schema = ParquetSchema(self)             # <<<<<<<<<<<<<<
 *         return self._schema
 * 
 */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ParquetSchema), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 624, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __Pyx_GOTREF(__pyx_v_self->_schema);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->_schema));
    __pyx_v_self->_schema = ((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyarrow/_parquet.pyx":623
 *     @property
 *     def schema(self):
 *         if self._schema is None:             # <<<<<<<<<<<<<<
 *             self._schema = ParquetSchema(self)
 *         return self._schema
 */
  }

  /* "pyarrow/_parquet.pyx":625
 *         if self._schema is None:
 *             self._schema = ParquetSchema(self)
 *         return self._schema             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_schema));
  __pyx_r = ((PyObject *)__pyx_v_self->_schema);
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":622
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         if self._schema is None:
 *             self._schema = ParquetSchema(self)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.schema.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":628
 * 
 *     @property
 *     def serialized_size(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.size()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_15serialized_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_15serialized_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_15serialized_size___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":629
 *     @property
 *     def serialized_size(self):
 *         return self._metadata.size()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_self->_metadata->size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":628
 * 
 *     @property
 *     def serialized_size(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.size()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.serialized_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":632
 * 
 *     @property
 *     def num_columns(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.num_columns()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_11num_columns_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_11num_columns_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_11num_columns___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":633
 *     @property
 *     def num_columns(self):
 *         return self._metadata.num_columns()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->_metadata->num_columns()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":632
 * 
 *     @property
 *     def num_columns(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.num_columns()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.num_columns.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":636
 * 
 *     @property
 *     def num_rows(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.num_rows()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_8num_rows_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_8num_rows_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_8num_rows___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":637
 *     @property
 *     def num_rows(self):
 *         return self._metadata.num_rows()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_self->_metadata->num_rows()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 637, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":636
 * 
 *     @property
 *     def num_rows(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.num_rows()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.num_rows.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":640
 * 
 *     @property
 *     def num_row_groups(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.num_row_groups()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_14num_row_groups_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_14num_row_groups_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_14num_row_groups___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":641
 *     @property
 *     def num_row_groups(self):
 *         return self._metadata.num_row_groups()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->_metadata->num_row_groups()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":640
 * 
 *     @property
 *     def num_row_groups(self):             # <<<<<<<<<<<<<<
 *         return self._metadata.num_row_groups()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.num_row_groups.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":644
 * 
 *     @property
 *     def format_version(self):             # <<<<<<<<<<<<<<
 *         cdef ParquetVersion version = self._metadata.version()
 *         if version == ParquetVersion_V1:
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_14format_version_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_14format_version_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_14format_version___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_14format_version___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  enum  parquet::ParquetVersion::type __pyx_v_version;
  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;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":645
 *     @property
 *     def format_version(self):
 *         cdef ParquetVersion version = self._metadata.version()             # <<<<<<<<<<<<<<
 *         if version == ParquetVersion_V1:
 *             return '1.0'
 */
  __pyx_v_version = __pyx_v_self->_metadata->version();

  /* "pyarrow/_parquet.pyx":646
 *     def format_version(self):
 *         cdef ParquetVersion version = self._metadata.version()
 *         if version == ParquetVersion_V1:             # <<<<<<<<<<<<<<
 *             return '1.0'
 *         if version == ParquetVersion_V2:
 */
  __pyx_t_1 = ((__pyx_v_version ==  parquet::ParquetVersion::PARQUET_1_0) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":647
 *         cdef ParquetVersion version = self._metadata.version()
 *         if version == ParquetVersion_V1:
 *             return '1.0'             # <<<<<<<<<<<<<<
 *         if version == ParquetVersion_V2:
 *             return '2.0'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_kp_u_1_0);
    __pyx_r = __pyx_kp_u_1_0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":646
 *     def format_version(self):
 *         cdef ParquetVersion version = self._metadata.version()
 *         if version == ParquetVersion_V1:             # <<<<<<<<<<<<<<
 *             return '1.0'
 *         if version == ParquetVersion_V2:
 */
  }

  /* "pyarrow/_parquet.pyx":648
 *         if version == ParquetVersion_V1:
 *             return '1.0'
 *         if version == ParquetVersion_V2:             # <<<<<<<<<<<<<<
 *             return '2.0'
 *         else:
 */
  __pyx_t_1 = ((__pyx_v_version ==  parquet::ParquetVersion::PARQUET_2_0) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":649
 *             return '1.0'
 *         if version == ParquetVersion_V2:
 *             return '2.0'             # <<<<<<<<<<<<<<
 *         else:
 *             warnings.warn('Unrecognized file version, assuming 1.0: {}'
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_kp_u_2_0);
    __pyx_r = __pyx_kp_u_2_0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":648
 *         if version == ParquetVersion_V1:
 *             return '1.0'
 *         if version == ParquetVersion_V2:             # <<<<<<<<<<<<<<
 *             return '2.0'
 *         else:
 */
  }

  /* "pyarrow/_parquet.pyx":651
 *             return '2.0'
 *         else:
 *             warnings.warn('Unrecognized file version, assuming 1.0: {}'             # <<<<<<<<<<<<<<
 *                           .format(version))
 *             return '1.0'
 */
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_warnings); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_warn); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pyarrow/_parquet.pyx":652
 *         else:
 *             warnings.warn('Unrecognized file version, assuming 1.0: {}'
 *                           .format(version))             # <<<<<<<<<<<<<<
 *             return '1.0'
 * 
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Unrecognized_file_version_assumi, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyInt_From_enum____parquet_3a__3a_ParquetVersion_3a__3a_type(__pyx_v_version); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __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(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":653
 *             warnings.warn('Unrecognized file version, assuming 1.0: {}'
 *                           .format(version))
 *             return '1.0'             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_kp_u_1_0);
    __pyx_r = __pyx_kp_u_1_0;
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":644
 * 
 *     @property
 *     def format_version(self):             # <<<<<<<<<<<<<<
 *         cdef ParquetVersion version = self._metadata.version()
 *         if version == ParquetVersion_V1:
 */

  /* 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_7);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.format_version.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":656
 * 
 *     @property
 *     def created_by(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self._metadata.created_by())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_10created_by_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_10created_by_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_10created_by___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_10created_by___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  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;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":657
 *     @property
 *     def created_by(self):
 *         return frombytes(self._metadata.created_by())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->_metadata->created_by()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_1)) __PYX_ERR(0, 657, __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;

  /* "pyarrow/_parquet.pyx":656
 * 
 *     @property
 *     def created_by(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self._metadata.created_by())
 * 
 */

  /* 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_AddTraceback("pyarrow._parquet.FileMetaData.created_by.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":660
 * 
 *     @property
 *     def metadata(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             unordered_map[c_string, c_string] metadata
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_8metadata_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_8metadata_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_8metadata___get__(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_8metadata___get__(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self) {
  std::unordered_map<std::string,std::string>  __pyx_v_metadata;
   arrow::KeyValueMetadata const *__pyx_v_underlying_metadata;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":664
 *             unordered_map[c_string, c_string] metadata
 *             const CKeyValueMetadata* underlying_metadata
 *         underlying_metadata = self._metadata.key_value_metadata().get()             # <<<<<<<<<<<<<<
 *         if underlying_metadata != NULL:
 *             underlying_metadata.ToUnorderedMap(&metadata)
 */
  __pyx_v_underlying_metadata = __pyx_v_self->_metadata->key_value_metadata().get();

  /* "pyarrow/_parquet.pyx":665
 *             const CKeyValueMetadata* underlying_metadata
 *         underlying_metadata = self._metadata.key_value_metadata().get()
 *         if underlying_metadata != NULL:             # <<<<<<<<<<<<<<
 *             underlying_metadata.ToUnorderedMap(&metadata)
 *             return metadata
 */
  __pyx_t_1 = ((__pyx_v_underlying_metadata != NULL) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":666
 *         underlying_metadata = self._metadata.key_value_metadata().get()
 *         if underlying_metadata != NULL:
 *             underlying_metadata.ToUnorderedMap(&metadata)             # <<<<<<<<<<<<<<
 *             return metadata
 *         else:
 */
    __pyx_v_underlying_metadata->ToUnorderedMap((&__pyx_v_metadata));

    /* "pyarrow/_parquet.pyx":667
 *         if underlying_metadata != NULL:
 *             underlying_metadata.ToUnorderedMap(&metadata)
 *             return metadata             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string(__pyx_v_metadata); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":665
 *             const CKeyValueMetadata* underlying_metadata
 *         underlying_metadata = self._metadata.key_value_metadata().get()
 *         if underlying_metadata != NULL:             # <<<<<<<<<<<<<<
 *             underlying_metadata.ToUnorderedMap(&metadata)
 *             return metadata
 */
  }

  /* "pyarrow/_parquet.pyx":669
 *             return metadata
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     def row_group(self, int i):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":660
 * 
 *     @property
 *     def metadata(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             unordered_map[c_string, c_string] metadata
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.metadata.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":671
 *             return None
 * 
 *     def row_group(self, int i):             # <<<<<<<<<<<<<<
 *         return RowGroupMetaData(self, i)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_13row_group(PyObject *__pyx_v_self, PyObject *__pyx_arg_i); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12FileMetaData_12row_group[] = "FileMetaData.row_group(self, int i)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_13row_group(PyObject *__pyx_v_self, PyObject *__pyx_arg_i) {
  int __pyx_v_i;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("row_group (wrapper)", 0);
  assert(__pyx_arg_i); {
    __pyx_v_i = __Pyx_PyInt_As_int(__pyx_arg_i); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 671, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.row_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_12row_group(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self), ((int)__pyx_v_i));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_12row_group(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, int __pyx_v_i) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("row_group", 0);

  /* "pyarrow/_parquet.pyx":672
 * 
 *     def row_group(self, int i):
 *         return RowGroupMetaData(self, i)             # <<<<<<<<<<<<<<
 * 
 *     def set_file_path(self, path):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_RowGroupMetaData), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 672, __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;

  /* "pyarrow/_parquet.pyx":671
 *             return None
 * 
 *     def row_group(self, int i):             # <<<<<<<<<<<<<<
 *         return RowGroupMetaData(self, i)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.row_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":674
 *         return RowGroupMetaData(self, i)
 * 
 *     def set_file_path(self, path):             # <<<<<<<<<<<<<<
 *         """
 *         Modify the file_path field of each ColumnChunk in the
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_15set_file_path(PyObject *__pyx_v_self, PyObject *__pyx_v_path); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12FileMetaData_14set_file_path[] = "FileMetaData.set_file_path(self, path)\n\n        Modify the file_path field of each ColumnChunk in the\n        FileMetaData to be a particular value\n        ";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_15set_file_path(PyObject *__pyx_v_self, PyObject *__pyx_v_path) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_file_path (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_14set_file_path(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self), ((PyObject *)__pyx_v_path));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_14set_file_path(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, PyObject *__pyx_v_path) {
  std::string __pyx_v_c_path;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  std::string __pyx_t_4;
  __Pyx_RefNannySetupContext("set_file_path", 0);

  /* "pyarrow/_parquet.pyx":680
 *         """
 *         cdef:
 *             c_string c_path = tobytes(path)             # <<<<<<<<<<<<<<
 *         self._metadata.set_file_path(c_path)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  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_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_path) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_path);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __pyx_convert_string_from_py_std__in_string(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 680, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_path = __pyx_t_4;

  /* "pyarrow/_parquet.pyx":681
 *         cdef:
 *             c_string c_path = tobytes(path)
 *         self._metadata.set_file_path(c_path)             # <<<<<<<<<<<<<<
 * 
 *     def append_row_groups(self, FileMetaData other):
 */
  __pyx_v_self->_metadata->set_file_path(__pyx_v_c_path);

  /* "pyarrow/_parquet.pyx":674
 *         return RowGroupMetaData(self, i)
 * 
 *     def set_file_path(self, path):             # <<<<<<<<<<<<<<
 *         """
 *         Modify the file_path field of each ColumnChunk in the
 */

  /* 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_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.set_file_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":683
 *         self._metadata.set_file_path(c_path)
 * 
 *     def append_row_groups(self, FileMetaData other):             # <<<<<<<<<<<<<<
 *         """
 *         Append row groups of other FileMetaData object
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_17append_row_groups(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12FileMetaData_16append_row_groups[] = "FileMetaData.append_row_groups(self, FileMetaData other)\n\n        Append row groups of other FileMetaData object\n        ";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_17append_row_groups(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("append_row_groups (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_7pyarrow_8_parquet_FileMetaData, 1, "other", 0))) __PYX_ERR(0, 683, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_16append_row_groups(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_16append_row_groups(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_other) {
  std::shared_ptr< parquet::FileMetaData>  __pyx_v_c_metadata;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::shared_ptr< parquet::FileMetaData>  __pyx_t_1;
  __Pyx_RefNannySetupContext("append_row_groups", 0);

  /* "pyarrow/_parquet.pyx":689
 *         cdef shared_ptr[CFileMetaData] c_metadata
 * 
 *         c_metadata = other.sp_metadata             # <<<<<<<<<<<<<<
 *         self._metadata.AppendRowGroups(deref(c_metadata))
 * 
 */
  __pyx_t_1 = __pyx_v_other->sp_metadata;
  __pyx_v_c_metadata = __pyx_t_1;

  /* "pyarrow/_parquet.pyx":690
 * 
 *         c_metadata = other.sp_metadata
 *         self._metadata.AppendRowGroups(deref(c_metadata))             # <<<<<<<<<<<<<<
 * 
 *     def write_metadata_file(self, where):
 */
  __pyx_v_self->_metadata->AppendRowGroups((*__pyx_v_c_metadata));

  /* "pyarrow/_parquet.pyx":683
 *         self._metadata.set_file_path(c_path)
 * 
 *     def append_row_groups(self, FileMetaData other):             # <<<<<<<<<<<<<<
 *         """
 *         Append row groups of other FileMetaData object
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":692
 *         self._metadata.AppendRowGroups(deref(c_metadata))
 * 
 *     def write_metadata_file(self, where):             # <<<<<<<<<<<<<<
 *         """
 *         Write the metadata object to a metadata-only file
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_19write_metadata_file(PyObject *__pyx_v_self, PyObject *__pyx_v_where); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12FileMetaData_18write_metadata_file[] = "FileMetaData.write_metadata_file(self, where)\n\n        Write the metadata object to a metadata-only file\n        ";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12FileMetaData_19write_metadata_file(PyObject *__pyx_v_self, PyObject *__pyx_v_where) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("write_metadata_file (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12FileMetaData_18write_metadata_file(((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_v_self), ((PyObject *)__pyx_v_where));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12FileMetaData_18write_metadata_file(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_self, PyObject *__pyx_v_where) {
  std::shared_ptr<arrow::io::OutputStream>  __pyx_v_sink;
  std::string __pyx_v_c_where;
  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;
  std::string __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  __Pyx_RefNannySetupContext("write_metadata_file", 0);
  __Pyx_INCREF(__pyx_v_where);

  /* "pyarrow/_parquet.pyx":700
 *             c_string c_where
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             where = _stringify_path(where)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":701
 * 
 *         try:
 *             where = _stringify_path(where)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             get_writer(where, &sink)
 */
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_stringify_path); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 701, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_where) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_where);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 701, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_where, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "pyarrow/_parquet.pyx":700
 *             c_string c_where
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             where = _stringify_path(where)
 *         except TypeError:
 */
    }

    /* "pyarrow/_parquet.pyx":705
 *             get_writer(where, &sink)
 *         else:
 *             c_where = tobytes(where)             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 check_status(FileOutputStream.Open(c_where, &sink))
 */
    /*else:*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 705, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_where) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_where);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 705, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = __pyx_convert_string_from_py_std__in_string(__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 705, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_c_where = __pyx_t_7;

      /* "pyarrow/_parquet.pyx":706
 *         else:
 *             c_where = tobytes(where)
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(FileOutputStream.Open(c_where, &sink))
 * 
 */
      {
          #ifdef WITH_THREAD
          PyThreadState *_save;
          Py_UNBLOCK_THREADS
          __Pyx_FastGIL_Remember();
          #endif
          /*try:*/ {

            /* "pyarrow/_parquet.pyx":707
 *             c_where = tobytes(where)
 *             with nogil:
 *                 check_status(FileOutputStream.Open(c_where, &sink))             # <<<<<<<<<<<<<<
 * 
 *         with nogil:
 */
            __pyx_t_8 = __pyx_f_7pyarrow_3lib_check_status(arrow::io::FileOutputStream::Open(__pyx_v_c_where, (&__pyx_v_sink))); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 707, __pyx_L10_error)
          }

          /* "pyarrow/_parquet.pyx":706
 *         else:
 *             c_where = tobytes(where)
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(FileOutputStream.Open(c_where, &sink))
 * 
 */
          /*finally:*/ {
            /*normal exit:*/{
              #ifdef WITH_THREAD
              __Pyx_FastGIL_Forget();
              Py_BLOCK_THREADS
              #endif
              goto __pyx_L11;
            }
            __pyx_L10_error: {
              #ifdef WITH_THREAD
              __Pyx_FastGIL_Forget();
              Py_BLOCK_THREADS
              #endif
              goto __pyx_L5_except_error;
            }
            __pyx_L11:;
          }
      }
    }
    __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;

    /* "pyarrow/_parquet.pyx":702
 *         try:
 *             where = _stringify_path(where)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             get_writer(where, &sink)
 *         else:
 */
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_8) {
      __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.write_metadata_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 702, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":703
 *             where = _stringify_path(where)
 *         except TypeError:
 *             get_writer(where, &sink)             # <<<<<<<<<<<<<<
 *         else:
 *             c_where = tobytes(where)
 */
      __pyx_t_9 = __pyx_f_7pyarrow_3lib_get_writer(__pyx_v_where, (&__pyx_v_sink)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 703, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 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_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":700
 *             c_string c_where
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             where = _stringify_path(where)
 *         except TypeError:
 */
    __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:;
  }

  /* "pyarrow/_parquet.pyx":709
 *                 check_status(FileOutputStream.Open(c_where, &sink))
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(
 *                 WriteMetaDataFile(deref(self._metadata), sink.get()))
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":710
 * 
 *         with nogil:
 *             check_status(             # <<<<<<<<<<<<<<
 *                 WriteMetaDataFile(deref(self._metadata), sink.get()))
 * 
 */
        __pyx_t_8 = __pyx_f_7pyarrow_3lib_check_status(parquet::arrow::WriteMetaDataFile((*__pyx_v_self->_metadata), __pyx_v_sink.get())); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 710, __pyx_L15_error)
      }

      /* "pyarrow/_parquet.pyx":709
 *                 check_status(FileOutputStream.Open(c_where, &sink))
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(
 *                 WriteMetaDataFile(deref(self._metadata), sink.get()))
 */
      /*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_L1_error;
        }
        __pyx_L16:;
      }
  }

  /* "pyarrow/_parquet.pyx":692
 *         self._metadata.AppendRowGroups(deref(c_metadata))
 * 
 *     def write_metadata_file(self, where):             # <<<<<<<<<<<<<<
 *         """
 *         Write the metadata object to a metadata-only file
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyarrow._parquet.FileMetaData.write_metadata_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_where);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":719
 *         const SchemaDescriptor* schema
 * 
 *     def __cinit__(self, FileMetaData container):             # <<<<<<<<<<<<<<
 *         self.parent = container
 *         self.schema = container._metadata.schema()
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_container = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_container,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_container)) != 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, "__cinit__") < 0)) __PYX_ERR(0, 719, __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_container = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 719, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_container), __pyx_ptype_7pyarrow_8_parquet_FileMetaData, 1, "container", 0))) __PYX_ERR(0, 719, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self), __pyx_v_container);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7pyarrow_8_parquet_13ParquetSchema___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_container) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyarrow/_parquet.pyx":720
 * 
 *     def __cinit__(self, FileMetaData container):
 *         self.parent = container             # <<<<<<<<<<<<<<
 *         self.schema = container._metadata.schema()
 * 
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_container));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_container));
  __Pyx_GOTREF(__pyx_v_self->parent);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->parent));
  __pyx_v_self->parent = __pyx_v_container;

  /* "pyarrow/_parquet.pyx":721
 *     def __cinit__(self, FileMetaData container):
 *         self.parent = container
 *         self.schema = container._metadata.schema()             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __pyx_v_self->schema = __pyx_v_container->_metadata->schema();

  /* "pyarrow/_parquet.pyx":719
 *         const SchemaDescriptor* schema
 * 
 *     def __cinit__(self, FileMetaData container):             # <<<<<<<<<<<<<<
 *         self.parent = container
 *         self.schema = container._metadata.schema()
 */

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

/* "pyarrow/_parquet.pyx":723
 *         self.schema = container._metadata.schema()
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         cdef const ColumnDescriptor* descr
 *         elements = []
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_3__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_2__repr__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_2__repr__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self) {
  PyObject *__pyx_v_elements = NULL;
  int __pyx_v_i;
  PyObject *__pyx_v_col = NULL;
  PyObject *__pyx_v_logical_type = NULL;
  PyObject *__pyx_v_formatted = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  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;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyarrow/_parquet.pyx":725
 *     def __repr__(self):
 *         cdef const ColumnDescriptor* descr
 *         elements = []             # <<<<<<<<<<<<<<
 *         for i in range(self.schema.num_columns()):
 *             col = self.column(i)
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_elements = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":726
 *         cdef const ColumnDescriptor* descr
 *         elements = []
 *         for i in range(self.schema.num_columns()):             # <<<<<<<<<<<<<<
 *             col = self.column(i)
 *             logical_type = col.logical_type
 */
  __pyx_t_2 = __pyx_v_self->schema->num_columns();
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;

    /* "pyarrow/_parquet.pyx":727
 *         elements = []
 *         for i in range(self.schema.num_columns()):
 *             col = self.column(i)             # <<<<<<<<<<<<<<
 *             logical_type = col.logical_type
 *             formatted = '{0}: {1}'.format(col.path, col.physical_type)
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_column); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_col, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":728
 *         for i in range(self.schema.num_columns()):
 *             col = self.column(i)
 *             logical_type = col.logical_type             # <<<<<<<<<<<<<<
 *             formatted = '{0}: {1}'.format(col.path, col.physical_type)
 *             if logical_type.type != 'NONE':
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_n_s_logical_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_logical_type, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":729
 *             col = self.column(i)
 *             logical_type = col.logical_type
 *             formatted = '{0}: {1}'.format(col.path, col.physical_type)             # <<<<<<<<<<<<<<
 *             if logical_type.type != 'NONE':
 *                 formatted += ' {0}'.format(str(logical_type))
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_1, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_n_s_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_col, __pyx_n_s_physical_type); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __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_t_6, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __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_5)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_6, __pyx_t_7};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 729, __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_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_7);
      __pyx_t_6 = 0;
      __pyx_t_7 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 729, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_formatted, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":730
 *             logical_type = col.logical_type
 *             formatted = '{0}: {1}'.format(col.path, col.physical_type)
 *             if logical_type.type != 'NONE':             # <<<<<<<<<<<<<<
 *                 formatted += ' {0}'.format(str(logical_type))
 *             elements.append(formatted)
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_logical_type, __pyx_n_s_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_11 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_NONE, Py_NE)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 730, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_11) {

      /* "pyarrow/_parquet.pyx":731
 *             formatted = '{0}: {1}'.format(col.path, col.physical_type)
 *             if logical_type.type != 'NONE':
 *                 formatted += ' {0}'.format(str(logical_type))             # <<<<<<<<<<<<<<
 *             elements.append(formatted)
 * 
 */
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 731, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_10 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_logical_type); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 731, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 731, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_formatted, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 731, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF_SET(__pyx_v_formatted, __pyx_t_5);
      __pyx_t_5 = 0;

      /* "pyarrow/_parquet.pyx":730
 *             logical_type = col.logical_type
 *             formatted = '{0}: {1}'.format(col.path, col.physical_type)
 *             if logical_type.type != 'NONE':             # <<<<<<<<<<<<<<
 *                 formatted += ' {0}'.format(str(logical_type))
 *             elements.append(formatted)
 */
    }

    /* "pyarrow/_parquet.pyx":732
 *             if logical_type.type != 'NONE':
 *                 formatted += ' {0}'.format(str(logical_type))
 *             elements.append(formatted)             # <<<<<<<<<<<<<<
 * 
 *         return """{0}
 */
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_elements, __pyx_v_formatted); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 732, __pyx_L1_error)
  }

  /* "pyarrow/_parquet.pyx":734
 *             elements.append(formatted)
 * 
 *         return """{0}             # <<<<<<<<<<<<<<
 * {1}
 *  """.format(object.__repr__(self), '\n'.join(elements))
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":736
 *         return """{0}
 * {1}
 *  """.format(object.__repr__(self), '\n'.join(elements))             # <<<<<<<<<<<<<<
 * 
 *     def __reduce__(self):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_1_2, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_builtin_object, __pyx_n_s_repr); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_10 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_v_self));
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyUnicode_Join(__pyx_kp_u__12, __pyx_v_elements); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = NULL;
  __pyx_t_2 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_2 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_10, __pyx_t_7};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 736, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_10, __pyx_t_7};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 736, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 736, __pyx_L1_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_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_2, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_2, __pyx_t_7);
    __pyx_t_10 = 0;
    __pyx_t_7 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 736, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":723
 *         self.schema = container._metadata.schema()
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         cdef const ColumnDescriptor* descr
 *         elements = []
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_elements);
  __Pyx_XDECREF(__pyx_v_col);
  __Pyx_XDECREF(__pyx_v_logical_type);
  __Pyx_XDECREF(__pyx_v_formatted);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":738
 *  """.format(object.__repr__(self), '\n'.join(elements))
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         return ParquetSchema, (self.parent,)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_5__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_4__reduce__[] = "ParquetSchema.__reduce__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_5__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_4__reduce__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_4__reduce__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyarrow/_parquet.pyx":739
 * 
 *     def __reduce__(self):
 *         return ParquetSchema, (self.parent,)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->parent));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->parent));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->parent));
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ParquetSchema));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ParquetSchema));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ParquetSchema));
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":738
 *  """.format(object.__repr__(self), '\n'.join(elements))
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         return ParquetSchema, (self.parent,)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":741
 *         return ParquetSchema, (self.parent,)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.schema.num_columns()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_7__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_7__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_6__len__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":742
 * 
 *     def __len__(self):
 *         return self.schema.num_columns()             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, i):
 */
  __pyx_r = __pyx_v_self->schema->num_columns();
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":741
 *         return ParquetSchema, (self.parent,)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.schema.num_columns()
 * 
 */

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

/* "pyarrow/_parquet.pyx":744
 *         return self.schema.num_columns()
 * 
 *     def __getitem__(self, i):             # <<<<<<<<<<<<<<
 *         return self.column(i)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_9__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_9__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_8__getitem__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self), ((PyObject *)__pyx_v_i));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_8__getitem__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, PyObject *__pyx_v_i) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pyarrow/_parquet.pyx":745
 * 
 *     def __getitem__(self, i):
 *         return self.column(i)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_column); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 745, __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_i) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_i);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __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;

  /* "pyarrow/_parquet.pyx":744
 *         return self.schema.num_columns()
 * 
 *     def __getitem__(self, i):             # <<<<<<<<<<<<<<
 *         return self.column(i)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":748
 * 
 *     @property
 *     def names(self):             # <<<<<<<<<<<<<<
 *         return [self[i].name for i in range(len(self))]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_5names_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_5names_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_5names___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_5names___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self) {
  Py_ssize_t __pyx_7genexpr__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":749
 *     @property
 *     def names(self):
 *         return [self[i].name for i in range(len(self))]             # <<<<<<<<<<<<<<
 * 
 *     def to_arrow_schema(self):
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyObject_Length(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 749, __pyx_L1_error)
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_7genexpr__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self), __pyx_7genexpr__pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 749, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_name); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 749, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 749, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":748
 * 
 *     @property
 *     def names(self):             # <<<<<<<<<<<<<<
 *         return [self[i].name for i in range(len(self))]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.names.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":751
 *         return [self[i].name for i in range(len(self))]
 * 
 *     def to_arrow_schema(self):             # <<<<<<<<<<<<<<
 *         """
 *         Convert Parquet schema to effective Arrow schema
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_11to_arrow_schema(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_10to_arrow_schema[] = "ParquetSchema.to_arrow_schema(self)\n\n        Convert Parquet schema to effective Arrow schema\n\n        Returns\n        -------\n        schema : pyarrow.Schema\n        ";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_11to_arrow_schema(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_arrow_schema (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_10to_arrow_schema(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_10to_arrow_schema(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self) {
  std::shared_ptr< arrow::Schema>  __pyx_v_sp_arrow_schema;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("to_arrow_schema", 0);

  /* "pyarrow/_parquet.pyx":761
 *         cdef shared_ptr[CSchema] sp_arrow_schema
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(FromParquetSchema(
 *                 self.schema, default_arrow_reader_properties(),
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":762
 * 
 *         with nogil:
 *             check_status(FromParquetSchema(             # <<<<<<<<<<<<<<
 *                 self.schema, default_arrow_reader_properties(),
 *                 self.parent._metadata.key_value_metadata(),
 */
        __pyx_t_1 = __pyx_f_7pyarrow_3lib_check_status(parquet::arrow::FromParquetSchema(__pyx_v_self->schema, parquet::default_arrow_reader_properties(), __pyx_v_self->parent->_metadata->key_value_metadata(), (&__pyx_v_sp_arrow_schema))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 762, __pyx_L4_error)
      }

      /* "pyarrow/_parquet.pyx":761
 *         cdef shared_ptr[CSchema] sp_arrow_schema
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(FromParquetSchema(
 *                 self.schema, default_arrow_reader_properties(),
 */
      /*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:;
      }
  }

  /* "pyarrow/_parquet.pyx":767
 *                 &sp_arrow_schema))
 * 
 *         return pyarrow_wrap_schema(sp_arrow_schema)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_v_sp_arrow_schema); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":751
 *         return [self[i].name for i in range(len(self))]
 * 
 *     def to_arrow_schema(self):             # <<<<<<<<<<<<<<
 *         """
 *         Convert Parquet schema to effective Arrow schema
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.to_arrow_schema", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":769
 *         return pyarrow_wrap_schema(sp_arrow_schema)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_13__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_13__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_12__eq__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_12__eq__(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pyarrow/_parquet.pyx":770
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":771
 *     def __eq__(self, other):
 *         try:
 *             return self.equals(other)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_equals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 771, __pyx_L3_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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_other) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_other);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 771, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;

      /* "pyarrow/_parquet.pyx":770
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    }
    __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;

    /* "pyarrow/_parquet.pyx":772
 *         try:
 *             return self.equals(other)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 * 
 */
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 772, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":773
 *             return self.equals(other)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *     def equals(self, ParquetSchema other):
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_builtin_NotImplemented);
      __pyx_r = __pyx_builtin_NotImplemented;
      __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;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":770
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    __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_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;
  }

  /* "pyarrow/_parquet.pyx":769
 *         return pyarrow_wrap_schema(sp_arrow_schema)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":775
 *             return NotImplemented
 * 
 *     def equals(self, ParquetSchema other):             # <<<<<<<<<<<<<<
 *         """
 *         Returns True if the Parquet schemas are equal
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_15equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_14equals[] = "ParquetSchema.equals(self, ParquetSchema other)\n\n        Returns True if the Parquet schemas are equal\n        ";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_15equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equals (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_7pyarrow_8_parquet_ParquetSchema, 1, "other", 0))) __PYX_ERR(0, 775, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_14equals(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_14equals(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("equals", 0);

  /* "pyarrow/_parquet.pyx":779
 *         Returns True if the Parquet schemas are equal
 *         """
 *         return self.schema.Equals(deref(other.schema))             # <<<<<<<<<<<<<<
 * 
 *     def column(self, i):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->schema->Equals((*__pyx_v_other->schema))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 779, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":775
 *             return NotImplemented
 * 
 *     def equals(self, ParquetSchema other):             # <<<<<<<<<<<<<<
 *         """
 *         Returns True if the Parquet schemas are equal
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.equals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":781
 *         return self.schema.Equals(deref(other.schema))
 * 
 *     def column(self, i):             # <<<<<<<<<<<<<<
 *         if i < 0 or i >= len(self):
 *             raise IndexError('{0} out of bounds'.format(i))
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_17column(PyObject *__pyx_v_self, PyObject *__pyx_v_i); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_16column[] = "ParquetSchema.column(self, i)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_17column(PyObject *__pyx_v_self, PyObject *__pyx_v_i) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("column (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetSchema_16column(((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)__pyx_v_self), ((PyObject *)__pyx_v_i));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetSchema_16column(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_self, PyObject *__pyx_v_i) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("column", 0);

  /* "pyarrow/_parquet.pyx":782
 * 
 *     def column(self, i):
 *         if i < 0 or i >= len(self):             # <<<<<<<<<<<<<<
 *             raise IndexError('{0} out of bounds'.format(i))
 * 
 */
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_i, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = PyObject_Length(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 782, __pyx_L1_error)
  __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyObject_RichCompare(__pyx_v_i, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "pyarrow/_parquet.pyx":783
 *     def column(self, i):
 *         if i < 0 or i >= len(self):
 *             raise IndexError('{0} out of bounds'.format(i))             # <<<<<<<<<<<<<<
 * 
 *         return ColumnSchema(self, i)
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_0_out_of_bounds, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_v_i) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_i);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 783, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 783, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 783, __pyx_L1_error)

    /* "pyarrow/_parquet.pyx":782
 * 
 *     def column(self, i):
 *         if i < 0 or i >= len(self):             # <<<<<<<<<<<<<<
 *             raise IndexError('{0} out of bounds'.format(i))
 * 
 */
  }

  /* "pyarrow/_parquet.pyx":785
 *             raise IndexError('{0} out of bounds'.format(i))
 * 
 *         return ColumnSchema(self, i)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
  __Pyx_INCREF(__pyx_v_i);
  __Pyx_GIVEREF(__pyx_v_i);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_i);
  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ColumnSchema), __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":781
 *         return self.schema.Equals(deref(other.schema))
 * 
 *     def column(self, i):             # <<<<<<<<<<<<<<
 *         if i < 0 or i >= len(self):
 *             raise IndexError('{0} out of bounds'.format(i))
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetSchema.column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":794
 *         const ColumnDescriptor* descr
 * 
 *     def __cinit__(self, ParquetSchema schema, int index):             # <<<<<<<<<<<<<<
 *         self.parent = schema
 *         self.index = index  # for pickling support
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_schema = 0;
  int __pyx_v_index;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema,&__pyx_n_s_index,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_schema)) != 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_index)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(0, 794, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 794, __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_schema = ((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)values[0]);
    __pyx_v_index = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 794, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 794, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_7pyarrow_8_parquet_ParquetSchema, 1, "schema", 0))) __PYX_ERR(0, 794, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self), __pyx_v_schema, __pyx_v_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7pyarrow_8_parquet_12ColumnSchema___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *__pyx_v_schema, int __pyx_v_index) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyarrow/_parquet.pyx":795
 * 
 *     def __cinit__(self, ParquetSchema schema, int index):
 *         self.parent = schema             # <<<<<<<<<<<<<<
 *         self.index = index  # for pickling support
 *         self.descr = schema.schema.Column(index)
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_schema));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_schema));
  __Pyx_GOTREF(__pyx_v_self->parent);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->parent));
  __pyx_v_self->parent = __pyx_v_schema;

  /* "pyarrow/_parquet.pyx":796
 *     def __cinit__(self, ParquetSchema schema, int index):
 *         self.parent = schema
 *         self.index = index  # for pickling support             # <<<<<<<<<<<<<<
 *         self.descr = schema.schema.Column(index)
 * 
 */
  __pyx_v_self->index = __pyx_v_index;

  /* "pyarrow/_parquet.pyx":797
 *         self.parent = schema
 *         self.index = index  # for pickling support
 *         self.descr = schema.schema.Column(index)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
 */
  __pyx_v_self->descr = __pyx_v_schema->schema->Column(__pyx_v_index);

  /* "pyarrow/_parquet.pyx":794
 *         const ColumnDescriptor* descr
 * 
 *     def __cinit__(self, ParquetSchema schema, int index):             # <<<<<<<<<<<<<<
 *         self.parent = schema
 *         self.index = index  # for pickling support
 */

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

/* "pyarrow/_parquet.pyx":799
 *         self.descr = schema.schema.Column(index)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_2__eq__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_2__eq__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self, PyObject *__pyx_v_other) {
  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;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pyarrow/_parquet.pyx":800
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":801
 *     def __eq__(self, other):
 *         try:
 *             return self.equals(other)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_equals); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 801, __pyx_L3_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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_other) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_other);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 801, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L7_try_return;

      /* "pyarrow/_parquet.pyx":800
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    }
    __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;

    /* "pyarrow/_parquet.pyx":802
 *         try:
 *             return self.equals(other)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 * 
 */
    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_7) {
      __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 802, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":803
 *             return self.equals(other)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *     def __reduce__(self):
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_builtin_NotImplemented);
      __pyx_r = __pyx_builtin_NotImplemented;
      __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;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":800
 * 
 *     def __eq__(self, other):
 *         try:             # <<<<<<<<<<<<<<
 *             return self.equals(other)
 *         except TypeError:
 */
    __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_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;
  }

  /* "pyarrow/_parquet.pyx":799
 *         self.descr = schema.schema.Column(index)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         try:
 *             return self.equals(other)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":805
 *             return NotImplemented
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         return ColumnSchema, (self.parent, self.index)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_5__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12ColumnSchema_4__reduce__[] = "ColumnSchema.__reduce__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_5__reduce__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4__reduce__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4__reduce__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__reduce__", 0);

  /* "pyarrow/_parquet.pyx":806
 * 
 *     def __reduce__(self):
 *         return ColumnSchema, (self.parent, self.index)             # <<<<<<<<<<<<<<
 * 
 *     def equals(self, ColumnSchema other):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->parent));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->parent));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self->parent));
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ColumnSchema));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ColumnSchema));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_ptype_7pyarrow_8_parquet_ColumnSchema));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":805
 *             return NotImplemented
 * 
 *     def __reduce__(self):             # <<<<<<<<<<<<<<
 *         return ColumnSchema, (self.parent, self.index)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.__reduce__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":808
 *         return ColumnSchema, (self.parent, self.index)
 * 
 *     def equals(self, ColumnSchema other):             # <<<<<<<<<<<<<<
 *         """
 *         Returns True if the column schemas are equal
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_7equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_12ColumnSchema_6equals[] = "ColumnSchema.equals(self, ColumnSchema other)\n\n        Returns True if the column schemas are equal\n        ";
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_7equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equals (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_7pyarrow_8_parquet_ColumnSchema, 1, "other", 0))) __PYX_ERR(0, 808, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_6equals(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_6equals(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self, struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("equals", 0);

  /* "pyarrow/_parquet.pyx":812
 *         Returns True if the column schemas are equal
 *         """
 *         return self.descr.Equals(deref(other.descr))             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->descr->Equals((*__pyx_v_other->descr))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":808
 *         return ColumnSchema, (self.parent, self.index)
 * 
 *     def equals(self, ColumnSchema other):             # <<<<<<<<<<<<<<
 *         """
 *         Returns True if the column schemas are equal
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.equals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":814
 *         return self.descr.Equals(deref(other.descr))
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         physical_type = self.physical_type
 *         converted_type = self.converted_type
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_9__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_9__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_8__repr__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_8__repr__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self) {
  PyObject *__pyx_v_physical_type = NULL;
  PyObject *__pyx_v_converted_type = NULL;
  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;
  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;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pyarrow/_parquet.pyx":815
 * 
 *     def __repr__(self):
 *         physical_type = self.physical_type             # <<<<<<<<<<<<<<
 *         converted_type = self.converted_type
 *         if converted_type == 'DECIMAL':
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_physical_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_physical_type = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":816
 *     def __repr__(self):
 *         physical_type = self.physical_type
 *         converted_type = self.converted_type             # <<<<<<<<<<<<<<
 *         if converted_type == 'DECIMAL':
 *             converted_type = 'DECIMAL({0}, {1})'.format(self.precision,
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_converted_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_converted_type = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":817
 *         physical_type = self.physical_type
 *         converted_type = self.converted_type
 *         if converted_type == 'DECIMAL':             # <<<<<<<<<<<<<<
 *             converted_type = 'DECIMAL({0}, {1})'.format(self.precision,
 *                                                         self.scale)
 */
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_converted_type, __pyx_n_u_DECIMAL, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 817, __pyx_L1_error)
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":818
 *         converted_type = self.converted_type
 *         if converted_type == 'DECIMAL':
 *             converted_type = 'DECIMAL({0}, {1})'.format(self.precision,             # <<<<<<<<<<<<<<
 *                                                         self.scale)
 *         elif physical_type == 'FIXED_LEN_BYTE_ARRAY':
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_DECIMAL_0_1, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_precision); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 818, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);

    /* "pyarrow/_parquet.pyx":819
 *         if converted_type == 'DECIMAL':
 *             converted_type = 'DECIMAL({0}, {1})'.format(self.precision,
 *                                                         self.scale)             # <<<<<<<<<<<<<<
 *         elif physical_type == 'FIXED_LEN_BYTE_ARRAY':
 *             converted_type = ('FIXED_LEN_BYTE_ARRAY(length={0})'
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scale); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 819, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 818, __pyx_L1_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_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_5);
      __pyx_t_4 = 0;
      __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 818, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_converted_type, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":817
 *         physical_type = self.physical_type
 *         converted_type = self.converted_type
 *         if converted_type == 'DECIMAL':             # <<<<<<<<<<<<<<
 *             converted_type = 'DECIMAL({0}, {1})'.format(self.precision,
 *                                                         self.scale)
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":820
 *             converted_type = 'DECIMAL({0}, {1})'.format(self.precision,
 *                                                         self.scale)
 *         elif physical_type == 'FIXED_LEN_BYTE_ARRAY':             # <<<<<<<<<<<<<<
 *             converted_type = ('FIXED_LEN_BYTE_ARRAY(length={0})'
 *                               .format(self.length))
 */
  __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_physical_type, __pyx_n_u_FIXED_LEN_BYTE_ARRAY, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 820, __pyx_L1_error)
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":822
 *         elif physical_type == 'FIXED_LEN_BYTE_ARRAY':
 *             converted_type = ('FIXED_LEN_BYTE_ARRAY(length={0})'
 *                               .format(self.length))             # <<<<<<<<<<<<<<
 * 
 *         return """<ParquetColumnSchema>
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_FIXED_LEN_BYTE_ARRAY_length_0, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_length); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = NULL;
    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_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 822, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_converted_type, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":820
 *             converted_type = 'DECIMAL({0}, {1})'.format(self.precision,
 *                                                         self.scale)
 *         elif physical_type == 'FIXED_LEN_BYTE_ARRAY':             # <<<<<<<<<<<<<<
 *             converted_type = ('FIXED_LEN_BYTE_ARRAY(length={0})'
 *                               .format(self.length))
 */
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":824
 *                               .format(self.length))
 * 
 *         return """<ParquetColumnSchema>             # <<<<<<<<<<<<<<
 *   name: {0}
 *   path: {1}
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":831
 *   physical_type: {4}
 *   logical_type: {5}
 *   converted_type (legacy): {6}""".format(self.name, self.path,             # <<<<<<<<<<<<<<
 *                                          self.max_definition_level,
 *                                          self.max_repetition_level,
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_ParquetColumnSchema_name_0_path, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 831, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 831, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_path); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 831, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pyarrow/_parquet.pyx":832
 *   logical_type: {5}
 *   converted_type (legacy): {6}""".format(self.name, self.path,
 *                                          self.max_definition_level,             # <<<<<<<<<<<<<<
 *                                          self.max_repetition_level,
 *                                          physical_type,
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_max_definition_level); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 832, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "pyarrow/_parquet.pyx":833
 *   converted_type (legacy): {6}""".format(self.name, self.path,
 *                                          self.max_definition_level,
 *                                          self.max_repetition_level,             # <<<<<<<<<<<<<<
 *                                          physical_type,
 *                                          str(self.logical_type),
 */
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_max_repetition_level); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "pyarrow/_parquet.pyx":835
 *                                          self.max_repetition_level,
 *                                          physical_type,
 *                                          str(self.logical_type),             # <<<<<<<<<<<<<<
 *                                          converted_type)
 * 
 */
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_logical_type); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "pyarrow/_parquet.pyx":836
 *                                          physical_type,
 *                                          str(self.logical_type),
 *                                          converted_type)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_t_9 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[8] = {__pyx_t_9, __pyx_t_8, __pyx_t_5, __pyx_t_4, __pyx_t_6, __pyx_v_physical_type, __pyx_t_10, __pyx_v_converted_type};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 7+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 831, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __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;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[8] = {__pyx_t_9, __pyx_t_8, __pyx_t_5, __pyx_t_4, __pyx_t_6, __pyx_v_physical_type, __pyx_t_10, __pyx_v_converted_type};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 7+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 831, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __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;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(7+__pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 831, __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_8);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_7, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_7, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_7, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_7, __pyx_t_6);
    __Pyx_INCREF(__pyx_v_physical_type);
    __Pyx_GIVEREF(__pyx_v_physical_type);
    PyTuple_SET_ITEM(__pyx_t_11, 4+__pyx_t_7, __pyx_v_physical_type);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_11, 5+__pyx_t_7, __pyx_t_10);
    __Pyx_INCREF(__pyx_v_converted_type);
    __Pyx_GIVEREF(__pyx_v_converted_type);
    PyTuple_SET_ITEM(__pyx_t_11, 6+__pyx_t_7, __pyx_v_converted_type);
    __pyx_t_8 = 0;
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
    __pyx_t_6 = 0;
    __pyx_t_10 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 831, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":814
 *         return self.descr.Equals(deref(other.descr))
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         physical_type = self.physical_type
 *         converted_type = self.converted_type
 */

  /* 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_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_physical_type);
  __Pyx_XDECREF(__pyx_v_converted_type);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":839
 * 
 *     @property
 *     def name(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.descr.name())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_4name_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4name___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4name___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self) {
  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;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":840
 *     @property
 *     def name(self):
 *         return frombytes(self.descr.name())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->descr->name()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_1)) __PYX_ERR(0, 840, __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;

  /* "pyarrow/_parquet.pyx":839
 * 
 *     @property
 *     def name(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.descr.name())
 * 
 */

  /* 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_AddTraceback("pyarrow._parquet.ColumnSchema.name.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":843
 * 
 *     @property
 *     def path(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.descr.path().get().ToDotString())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_4path_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_4path_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4path___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_12ColumnSchema_4path___get__(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *__pyx_v_self) {
  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;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":844
 *     @property
 *     def path(self):
 *         return frombytes(self.descr.path().get().ToDotString())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->descr->path().get()->ToDotString()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_1)) __PYX_ERR(0, 844, __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;

  /* "pyarrow/_parquet.pyx":843
 * 
 *     @property
 *     def path(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.descr.path().get().ToDotString())
 * 
 */

  /* 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_AddTraceback("pyarrow._parquet.ColumnSchema.path.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":847
 * 
 *     @property
 *     def max_definition_level(self):             # <<<<<<<<<<<<<<
 *         return self.descr.max_definition_level()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_20max_definition_level_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_20max_definition_level_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_20max_definition_level___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":848
 *     @property
 *     def max_definition_level(self):
 *         return self.descr.max_definition_level()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int16_t(__pyx_v_self->descr->max_definition_level()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":847
 * 
 *     @property
 *     def max_definition_level(self):             # <<<<<<<<<<<<<<
 *         return self.descr.max_definition_level()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.max_definition_level.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":851
 * 
 *     @property
 *     def max_repetition_level(self):             # <<<<<<<<<<<<<<
 *         return self.descr.max_repetition_level()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_20max_repetition_level_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_20max_repetition_level_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_20max_repetition_level___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":852
 *     @property
 *     def max_repetition_level(self):
 *         return self.descr.max_repetition_level()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int16_t(__pyx_v_self->descr->max_repetition_level()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":851
 * 
 *     @property
 *     def max_repetition_level(self):             # <<<<<<<<<<<<<<
 *         return self.descr.max_repetition_level()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.max_repetition_level.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":855
 * 
 *     @property
 *     def physical_type(self):             # <<<<<<<<<<<<<<
 *         return physical_type_name_from_enum(self.descr.physical_type())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_13physical_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_13physical_type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_13physical_type___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":856
 *     @property
 *     def physical_type(self):
 *         return physical_type_name_from_enum(self.descr.physical_type())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_physical_type_name_from_enum(__pyx_v_self->descr->physical_type()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 856, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":855
 * 
 *     @property
 *     def physical_type(self):             # <<<<<<<<<<<<<<
 *         return physical_type_name_from_enum(self.descr.physical_type())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.physical_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":867
 * 
 *     @property
 *     def logical_type(self):             # <<<<<<<<<<<<<<
 *         return wrap_logical_type(self.descr.logical_type())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_12logical_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_12logical_type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_12logical_type___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":868
 *     @property
 *     def logical_type(self):
 *         return wrap_logical_type(self.descr.logical_type())             # <<<<<<<<<<<<<<
 * 
 *     # FIXED_LEN_BYTE_ARRAY attribute
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_wrap_logical_type(__pyx_v_self->descr->logical_type()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":867
 * 
 *     @property
 *     def logical_type(self):             # <<<<<<<<<<<<<<
 *         return wrap_logical_type(self.descr.logical_type())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.logical_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":863
 * 
 *     @property
 *     def converted_type(self):             # <<<<<<<<<<<<<<
 *         return converted_type_name_from_enum(self.descr.converted_type())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_14converted_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_14converted_type_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_14converted_type___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":864
 *     @property
 *     def converted_type(self):
 *         return converted_type_name_from_enum(self.descr.converted_type())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_parquet_converted_type_name_from_enum(__pyx_v_self->descr->converted_type()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":863
 * 
 *     @property
 *     def converted_type(self):             # <<<<<<<<<<<<<<
 *         return converted_type_name_from_enum(self.descr.converted_type())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.converted_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":872
 *     # FIXED_LEN_BYTE_ARRAY attribute
 *     @property
 *     def length(self):             # <<<<<<<<<<<<<<
 *         return self.descr.type_length()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_6length_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_6length_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_6length___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":873
 *     @property
 *     def length(self):
 *         return self.descr.type_length()             # <<<<<<<<<<<<<<
 * 
 *     # Decimal attributes
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->descr->type_length()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":872
 *     # FIXED_LEN_BYTE_ARRAY attribute
 *     @property
 *     def length(self):             # <<<<<<<<<<<<<<
 *         return self.descr.type_length()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.length.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":877
 *     # Decimal attributes
 *     @property
 *     def precision(self):             # <<<<<<<<<<<<<<
 *         return self.descr.type_precision()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_9precision_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_9precision_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_9precision___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":878
 *     @property
 *     def precision(self):
 *         return self.descr.type_precision()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->descr->type_precision()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":877
 *     # Decimal attributes
 *     @property
 *     def precision(self):             # <<<<<<<<<<<<<<
 *         return self.descr.type_precision()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.precision.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":881
 * 
 *     @property
 *     def scale(self):             # <<<<<<<<<<<<<<
 *         return self.descr.type_scale()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_5scale_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_5scale_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_12ColumnSchema_5scale___get__(((struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":882
 *     @property
 *     def scale(self):
 *         return self.descr.type_scale()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->descr->type_scale()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":881
 * 
 *     @property
 *     def scale(self):             # <<<<<<<<<<<<<<
 *         return self.descr.type_scale()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ColumnSchema.scale.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":885
 * 
 * 
 * cdef physical_type_name_from_enum(ParquetType type_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetType_BOOLEAN: 'BOOLEAN',
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_physical_type_name_from_enum(enum  parquet::Type::type __pyx_v_type_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("physical_type_name_from_enum", 0);

  /* "pyarrow/_parquet.pyx":886
 * 
 * cdef physical_type_name_from_enum(ParquetType type_):
 *     return {             # <<<<<<<<<<<<<<
 *         ParquetType_BOOLEAN: 'BOOLEAN',
 *         ParquetType_INT32: 'INT32',
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":887
 * cdef physical_type_name_from_enum(ParquetType type_):
 *     return {
 *         ParquetType_BOOLEAN: 'BOOLEAN',             # <<<<<<<<<<<<<<
 *         ParquetType_INT32: 'INT32',
 *         ParquetType_INT64: 'INT64',
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::BOOLEAN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_BOOLEAN) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":888
 *     return {
 *         ParquetType_BOOLEAN: 'BOOLEAN',
 *         ParquetType_INT32: 'INT32',             # <<<<<<<<<<<<<<
 *         ParquetType_INT64: 'INT64',
 *         ParquetType_INT96: 'INT96',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::INT32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INT32) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":889
 *         ParquetType_BOOLEAN: 'BOOLEAN',
 *         ParquetType_INT32: 'INT32',
 *         ParquetType_INT64: 'INT64',             # <<<<<<<<<<<<<<
 *         ParquetType_INT96: 'INT96',
 *         ParquetType_FLOAT: 'FLOAT',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::INT64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INT64) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":890
 *         ParquetType_INT32: 'INT32',
 *         ParquetType_INT64: 'INT64',
 *         ParquetType_INT96: 'INT96',             # <<<<<<<<<<<<<<
 *         ParquetType_FLOAT: 'FLOAT',
 *         ParquetType_DOUBLE: 'DOUBLE',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::INT96); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INT96) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":891
 *         ParquetType_INT64: 'INT64',
 *         ParquetType_INT96: 'INT96',
 *         ParquetType_FLOAT: 'FLOAT',             # <<<<<<<<<<<<<<
 *         ParquetType_DOUBLE: 'DOUBLE',
 *         ParquetType_BYTE_ARRAY: 'BYTE_ARRAY',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::FLOAT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_FLOAT) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":892
 *         ParquetType_INT96: 'INT96',
 *         ParquetType_FLOAT: 'FLOAT',
 *         ParquetType_DOUBLE: 'DOUBLE',             # <<<<<<<<<<<<<<
 *         ParquetType_BYTE_ARRAY: 'BYTE_ARRAY',
 *         ParquetType_FIXED_LEN_BYTE_ARRAY: 'FIXED_LEN_BYTE_ARRAY',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::DOUBLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DOUBLE) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":893
 *         ParquetType_FLOAT: 'FLOAT',
 *         ParquetType_DOUBLE: 'DOUBLE',
 *         ParquetType_BYTE_ARRAY: 'BYTE_ARRAY',             # <<<<<<<<<<<<<<
 *         ParquetType_FIXED_LEN_BYTE_ARRAY: 'FIXED_LEN_BYTE_ARRAY',
 *     }.get(type_, 'UNKNOWN')
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::BYTE_ARRAY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_BYTE_ARRAY) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":894
 *         ParquetType_DOUBLE: 'DOUBLE',
 *         ParquetType_BYTE_ARRAY: 'BYTE_ARRAY',
 *         ParquetType_FIXED_LEN_BYTE_ARRAY: 'FIXED_LEN_BYTE_ARRAY',             # <<<<<<<<<<<<<<
 *     }.get(type_, 'UNKNOWN')
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type( parquet::Type::FIXED_LEN_BYTE_ARRAY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_FIXED_LEN_BYTE_ARRAY) < 0) __PYX_ERR(0, 887, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":895
 *         ParquetType_BYTE_ARRAY: 'BYTE_ARRAY',
 *         ParquetType_FIXED_LEN_BYTE_ARRAY: 'FIXED_LEN_BYTE_ARRAY',
 *     }.get(type_, 'UNKNOWN')             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type(__pyx_v_type_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_t_1, __pyx_t_2, __pyx_n_u_UNKNOWN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __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;

  /* "pyarrow/_parquet.pyx":885
 * 
 * 
 * cdef physical_type_name_from_enum(ParquetType type_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetType_BOOLEAN: 'BOOLEAN',
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.physical_type_name_from_enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":898
 * 
 * 
 * cdef logical_type_name_from_enum(ParquetLogicalTypeId type_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetLogicalType_UNKNOWN: 'UNKNOWN',
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_logical_type_name_from_enum(enum  parquet::LogicalType::Type::type __pyx_v_type_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("logical_type_name_from_enum", 0);

  /* "pyarrow/_parquet.pyx":899
 * 
 * cdef logical_type_name_from_enum(ParquetLogicalTypeId type_):
 *     return {             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_UNKNOWN: 'UNKNOWN',
 *         ParquetLogicalType_STRING: 'STRING',
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":900
 * cdef logical_type_name_from_enum(ParquetLogicalTypeId type_):
 *     return {
 *         ParquetLogicalType_UNKNOWN: 'UNKNOWN',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_STRING: 'STRING',
 *         ParquetLogicalType_MAP: 'MAP',
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(14); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::UNKNOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UNKNOWN) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":901
 *     return {
 *         ParquetLogicalType_UNKNOWN: 'UNKNOWN',
 *         ParquetLogicalType_STRING: 'STRING',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_MAP: 'MAP',
 *         ParquetLogicalType_LIST: 'LIST',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::STRING); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_STRING) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":902
 *         ParquetLogicalType_UNKNOWN: 'UNKNOWN',
 *         ParquetLogicalType_STRING: 'STRING',
 *         ParquetLogicalType_MAP: 'MAP',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_LIST: 'LIST',
 *         ParquetLogicalType_ENUM: 'ENUM',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::MAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_MAP) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":903
 *         ParquetLogicalType_STRING: 'STRING',
 *         ParquetLogicalType_MAP: 'MAP',
 *         ParquetLogicalType_LIST: 'LIST',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_ENUM: 'ENUM',
 *         ParquetLogicalType_DECIMAL: 'DECIMAL',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::LIST); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_LIST) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":904
 *         ParquetLogicalType_MAP: 'MAP',
 *         ParquetLogicalType_LIST: 'LIST',
 *         ParquetLogicalType_ENUM: 'ENUM',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_DECIMAL: 'DECIMAL',
 *         ParquetLogicalType_DATE: 'DATE',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::ENUM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_ENUM) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":905
 *         ParquetLogicalType_LIST: 'LIST',
 *         ParquetLogicalType_ENUM: 'ENUM',
 *         ParquetLogicalType_DECIMAL: 'DECIMAL',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_DATE: 'DATE',
 *         ParquetLogicalType_TIME: 'TIME',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::DECIMAL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DECIMAL) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":906
 *         ParquetLogicalType_ENUM: 'ENUM',
 *         ParquetLogicalType_DECIMAL: 'DECIMAL',
 *         ParquetLogicalType_DATE: 'DATE',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_TIME: 'TIME',
 *         ParquetLogicalType_TIMESTAMP: 'TIMESTAMP',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::DATE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DATE) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":907
 *         ParquetLogicalType_DECIMAL: 'DECIMAL',
 *         ParquetLogicalType_DATE: 'DATE',
 *         ParquetLogicalType_TIME: 'TIME',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_TIMESTAMP: 'TIMESTAMP',
 *         ParquetLogicalType_INT: 'INT',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::TIME); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_TIME) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":908
 *         ParquetLogicalType_DATE: 'DATE',
 *         ParquetLogicalType_TIME: 'TIME',
 *         ParquetLogicalType_TIMESTAMP: 'TIMESTAMP',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_INT: 'INT',
 *         ParquetLogicalType_JSON: 'JSON',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::TIMESTAMP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_TIMESTAMP) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":909
 *         ParquetLogicalType_TIME: 'TIME',
 *         ParquetLogicalType_TIMESTAMP: 'TIMESTAMP',
 *         ParquetLogicalType_INT: 'INT',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_JSON: 'JSON',
 *         ParquetLogicalType_BSON: 'BSON',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::INT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INT) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":910
 *         ParquetLogicalType_TIMESTAMP: 'TIMESTAMP',
 *         ParquetLogicalType_INT: 'INT',
 *         ParquetLogicalType_JSON: 'JSON',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_BSON: 'BSON',
 *         ParquetLogicalType_UUID: 'UUID',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::JSON); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_JSON) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":911
 *         ParquetLogicalType_INT: 'INT',
 *         ParquetLogicalType_JSON: 'JSON',
 *         ParquetLogicalType_BSON: 'BSON',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_UUID: 'UUID',
 *         ParquetLogicalType_NONE: 'NONE',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::BSON); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 911, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_BSON) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":912
 *         ParquetLogicalType_JSON: 'JSON',
 *         ParquetLogicalType_BSON: 'BSON',
 *         ParquetLogicalType_UUID: 'UUID',             # <<<<<<<<<<<<<<
 *         ParquetLogicalType_NONE: 'NONE',
 *     }.get(type_, 'UNKNOWN')
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::UUID); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UUID) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":913
 *         ParquetLogicalType_BSON: 'BSON',
 *         ParquetLogicalType_UUID: 'UUID',
 *         ParquetLogicalType_NONE: 'NONE',             # <<<<<<<<<<<<<<
 *     }.get(type_, 'UNKNOWN')
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type( parquet::LogicalType::Type::NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_NONE) < 0) __PYX_ERR(0, 900, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":914
 *         ParquetLogicalType_UUID: 'UUID',
 *         ParquetLogicalType_NONE: 'NONE',
 *     }.get(type_, 'UNKNOWN')             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type(__pyx_v_type_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_t_1, __pyx_t_2, __pyx_n_u_UNKNOWN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __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;

  /* "pyarrow/_parquet.pyx":898
 * 
 * 
 * cdef logical_type_name_from_enum(ParquetLogicalTypeId type_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetLogicalType_UNKNOWN: 'UNKNOWN',
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.logical_type_name_from_enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":917
 * 
 * 
 * cdef converted_type_name_from_enum(ParquetConvertedType type_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetConvertedType_NONE: 'NONE',
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_converted_type_name_from_enum(enum  parquet::ConvertedType::type __pyx_v_type_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("converted_type_name_from_enum", 0);

  /* "pyarrow/_parquet.pyx":918
 * 
 * cdef converted_type_name_from_enum(ParquetConvertedType type_):
 *     return {             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_NONE: 'NONE',
 *         ParquetConvertedType_UTF8: 'UTF8',
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":919
 * cdef converted_type_name_from_enum(ParquetConvertedType type_):
 *     return {
 *         ParquetConvertedType_NONE: 'NONE',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_UTF8: 'UTF8',
 *         ParquetConvertedType_MAP: 'MAP',
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(23); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::NONE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_NONE) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":920
 *     return {
 *         ParquetConvertedType_NONE: 'NONE',
 *         ParquetConvertedType_UTF8: 'UTF8',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_MAP: 'MAP',
 *         ParquetConvertedType_MAP_KEY_VALUE: 'MAP_KEY_VALUE',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::UTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UTF8) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":921
 *         ParquetConvertedType_NONE: 'NONE',
 *         ParquetConvertedType_UTF8: 'UTF8',
 *         ParquetConvertedType_MAP: 'MAP',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_MAP_KEY_VALUE: 'MAP_KEY_VALUE',
 *         ParquetConvertedType_LIST: 'LIST',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::MAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_MAP) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":922
 *         ParquetConvertedType_UTF8: 'UTF8',
 *         ParquetConvertedType_MAP: 'MAP',
 *         ParquetConvertedType_MAP_KEY_VALUE: 'MAP_KEY_VALUE',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_LIST: 'LIST',
 *         ParquetConvertedType_ENUM: 'ENUM',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::MAP_KEY_VALUE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_MAP_KEY_VALUE) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":923
 *         ParquetConvertedType_MAP: 'MAP',
 *         ParquetConvertedType_MAP_KEY_VALUE: 'MAP_KEY_VALUE',
 *         ParquetConvertedType_LIST: 'LIST',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_ENUM: 'ENUM',
 *         ParquetConvertedType_DECIMAL: 'DECIMAL',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::LIST); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_LIST) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":924
 *         ParquetConvertedType_MAP_KEY_VALUE: 'MAP_KEY_VALUE',
 *         ParquetConvertedType_LIST: 'LIST',
 *         ParquetConvertedType_ENUM: 'ENUM',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_DECIMAL: 'DECIMAL',
 *         ParquetConvertedType_DATE: 'DATE',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::ENUM); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_ENUM) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":925
 *         ParquetConvertedType_LIST: 'LIST',
 *         ParquetConvertedType_ENUM: 'ENUM',
 *         ParquetConvertedType_DECIMAL: 'DECIMAL',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_DATE: 'DATE',
 *         ParquetConvertedType_TIME_MILLIS: 'TIME_MILLIS',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::DECIMAL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DECIMAL) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":926
 *         ParquetConvertedType_ENUM: 'ENUM',
 *         ParquetConvertedType_DECIMAL: 'DECIMAL',
 *         ParquetConvertedType_DATE: 'DATE',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_TIME_MILLIS: 'TIME_MILLIS',
 *         ParquetConvertedType_TIME_MICROS: 'TIME_MICROS',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::DATE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DATE) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":927
 *         ParquetConvertedType_DECIMAL: 'DECIMAL',
 *         ParquetConvertedType_DATE: 'DATE',
 *         ParquetConvertedType_TIME_MILLIS: 'TIME_MILLIS',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_TIME_MICROS: 'TIME_MICROS',
 *         ParquetConvertedType_TIMESTAMP_MILLIS: 'TIMESTAMP_MILLIS',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::TIME_MILLIS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_TIME_MILLIS) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":928
 *         ParquetConvertedType_DATE: 'DATE',
 *         ParquetConvertedType_TIME_MILLIS: 'TIME_MILLIS',
 *         ParquetConvertedType_TIME_MICROS: 'TIME_MICROS',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_TIMESTAMP_MILLIS: 'TIMESTAMP_MILLIS',
 *         ParquetConvertedType_TIMESTAMP_MICROS: 'TIMESTAMP_MICROS',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::TIME_MICROS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 928, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_TIME_MICROS) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":929
 *         ParquetConvertedType_TIME_MILLIS: 'TIME_MILLIS',
 *         ParquetConvertedType_TIME_MICROS: 'TIME_MICROS',
 *         ParquetConvertedType_TIMESTAMP_MILLIS: 'TIMESTAMP_MILLIS',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_TIMESTAMP_MICROS: 'TIMESTAMP_MICROS',
 *         ParquetConvertedType_UINT_8: 'UINT_8',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::TIMESTAMP_MILLIS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_TIMESTAMP_MILLIS) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":930
 *         ParquetConvertedType_TIME_MICROS: 'TIME_MICROS',
 *         ParquetConvertedType_TIMESTAMP_MILLIS: 'TIMESTAMP_MILLIS',
 *         ParquetConvertedType_TIMESTAMP_MICROS: 'TIMESTAMP_MICROS',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_UINT_8: 'UINT_8',
 *         ParquetConvertedType_UINT_16: 'UINT_16',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::TIMESTAMP_MICROS); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_TIMESTAMP_MICROS) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":931
 *         ParquetConvertedType_TIMESTAMP_MILLIS: 'TIMESTAMP_MILLIS',
 *         ParquetConvertedType_TIMESTAMP_MICROS: 'TIMESTAMP_MICROS',
 *         ParquetConvertedType_UINT_8: 'UINT_8',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_UINT_16: 'UINT_16',
 *         ParquetConvertedType_UINT_32: 'UINT_32',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::UINT_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UINT_8) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":932
 *         ParquetConvertedType_TIMESTAMP_MICROS: 'TIMESTAMP_MICROS',
 *         ParquetConvertedType_UINT_8: 'UINT_8',
 *         ParquetConvertedType_UINT_16: 'UINT_16',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_UINT_32: 'UINT_32',
 *         ParquetConvertedType_UINT_64: 'UINT_64',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::UINT_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UINT_16) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":933
 *         ParquetConvertedType_UINT_8: 'UINT_8',
 *         ParquetConvertedType_UINT_16: 'UINT_16',
 *         ParquetConvertedType_UINT_32: 'UINT_32',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_UINT_64: 'UINT_64',
 *         ParquetConvertedType_INT_8: 'INT_8',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::UINT_32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UINT_32) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":934
 *         ParquetConvertedType_UINT_16: 'UINT_16',
 *         ParquetConvertedType_UINT_32: 'UINT_32',
 *         ParquetConvertedType_UINT_64: 'UINT_64',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_INT_8: 'INT_8',
 *         ParquetConvertedType_INT_16: 'INT_16',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::UINT_64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UINT_64) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":935
 *         ParquetConvertedType_UINT_32: 'UINT_32',
 *         ParquetConvertedType_UINT_64: 'UINT_64',
 *         ParquetConvertedType_INT_8: 'INT_8',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_INT_16: 'INT_16',
 *         ParquetConvertedType_INT_32: 'INT_32',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::INT_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INT_8) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":936
 *         ParquetConvertedType_UINT_64: 'UINT_64',
 *         ParquetConvertedType_INT_8: 'INT_8',
 *         ParquetConvertedType_INT_16: 'INT_16',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_INT_32: 'INT_32',
 *         ParquetConvertedType_INT_64: 'UINT_64',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::INT_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 936, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INT_16) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":937
 *         ParquetConvertedType_INT_8: 'INT_8',
 *         ParquetConvertedType_INT_16: 'INT_16',
 *         ParquetConvertedType_INT_32: 'INT_32',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_INT_64: 'UINT_64',
 *         ParquetConvertedType_JSON: 'JSON',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::INT_32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 937, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INT_32) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":938
 *         ParquetConvertedType_INT_16: 'INT_16',
 *         ParquetConvertedType_INT_32: 'INT_32',
 *         ParquetConvertedType_INT_64: 'UINT_64',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_JSON: 'JSON',
 *         ParquetConvertedType_BSON: 'BSON',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::INT_64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UINT_64) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":939
 *         ParquetConvertedType_INT_32: 'INT_32',
 *         ParquetConvertedType_INT_64: 'UINT_64',
 *         ParquetConvertedType_JSON: 'JSON',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_BSON: 'BSON',
 *         ParquetConvertedType_INTERVAL: 'INTERVAL',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::JSON); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_JSON) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":940
 *         ParquetConvertedType_INT_64: 'UINT_64',
 *         ParquetConvertedType_JSON: 'JSON',
 *         ParquetConvertedType_BSON: 'BSON',             # <<<<<<<<<<<<<<
 *         ParquetConvertedType_INTERVAL: 'INTERVAL',
 *     }.get(type_, 'UNKNOWN')
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::BSON); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_BSON) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":941
 *         ParquetConvertedType_JSON: 'JSON',
 *         ParquetConvertedType_BSON: 'BSON',
 *         ParquetConvertedType_INTERVAL: 'INTERVAL',             # <<<<<<<<<<<<<<
 *     }.get(type_, 'UNKNOWN')
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type( parquet::ConvertedType::INTERVAL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 941, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_INTERVAL) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":942
 *         ParquetConvertedType_BSON: 'BSON',
 *         ParquetConvertedType_INTERVAL: 'INTERVAL',
 *     }.get(type_, 'UNKNOWN')             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type(__pyx_v_type_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_t_1, __pyx_t_2, __pyx_n_u_UNKNOWN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 942, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __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;

  /* "pyarrow/_parquet.pyx":917
 * 
 * 
 * cdef converted_type_name_from_enum(ParquetConvertedType type_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetConvertedType_NONE: 'NONE',
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.converted_type_name_from_enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":945
 * 
 * 
 * cdef encoding_name_from_enum(ParquetEncoding encoding_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetEncoding_PLAIN: 'PLAIN',
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_encoding_name_from_enum(enum  parquet::Encoding::type __pyx_v_encoding_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("encoding_name_from_enum", 0);

  /* "pyarrow/_parquet.pyx":946
 * 
 * cdef encoding_name_from_enum(ParquetEncoding encoding_):
 *     return {             # <<<<<<<<<<<<<<
 *         ParquetEncoding_PLAIN: 'PLAIN',
 *         ParquetEncoding_PLAIN_DICTIONARY: 'PLAIN_DICTIONARY',
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":947
 * cdef encoding_name_from_enum(ParquetEncoding encoding_):
 *     return {
 *         ParquetEncoding_PLAIN: 'PLAIN',             # <<<<<<<<<<<<<<
 *         ParquetEncoding_PLAIN_DICTIONARY: 'PLAIN_DICTIONARY',
 *         ParquetEncoding_RLE: 'RLE',
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::PLAIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_PLAIN) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":948
 *     return {
 *         ParquetEncoding_PLAIN: 'PLAIN',
 *         ParquetEncoding_PLAIN_DICTIONARY: 'PLAIN_DICTIONARY',             # <<<<<<<<<<<<<<
 *         ParquetEncoding_RLE: 'RLE',
 *         ParquetEncoding_BIT_PACKED: 'BIT_PACKED',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::PLAIN_DICTIONARY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 948, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_PLAIN_DICTIONARY) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":949
 *         ParquetEncoding_PLAIN: 'PLAIN',
 *         ParquetEncoding_PLAIN_DICTIONARY: 'PLAIN_DICTIONARY',
 *         ParquetEncoding_RLE: 'RLE',             # <<<<<<<<<<<<<<
 *         ParquetEncoding_BIT_PACKED: 'BIT_PACKED',
 *         ParquetEncoding_DELTA_BINARY_PACKED: 'DELTA_BINARY_PACKED',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::RLE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_RLE) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":950
 *         ParquetEncoding_PLAIN_DICTIONARY: 'PLAIN_DICTIONARY',
 *         ParquetEncoding_RLE: 'RLE',
 *         ParquetEncoding_BIT_PACKED: 'BIT_PACKED',             # <<<<<<<<<<<<<<
 *         ParquetEncoding_DELTA_BINARY_PACKED: 'DELTA_BINARY_PACKED',
 *         ParquetEncoding_DELTA_LENGTH_BYTE_ARRAY: 'DELTA_LENGTH_BYTE_ARRAY',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::BIT_PACKED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_BIT_PACKED) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":951
 *         ParquetEncoding_RLE: 'RLE',
 *         ParquetEncoding_BIT_PACKED: 'BIT_PACKED',
 *         ParquetEncoding_DELTA_BINARY_PACKED: 'DELTA_BINARY_PACKED',             # <<<<<<<<<<<<<<
 *         ParquetEncoding_DELTA_LENGTH_BYTE_ARRAY: 'DELTA_LENGTH_BYTE_ARRAY',
 *         ParquetEncoding_DELTA_BYTE_ARRAY: 'DELTA_BYTE_ARRAY',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::DELTA_BINARY_PACKED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 951, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DELTA_BINARY_PACKED) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":952
 *         ParquetEncoding_BIT_PACKED: 'BIT_PACKED',
 *         ParquetEncoding_DELTA_BINARY_PACKED: 'DELTA_BINARY_PACKED',
 *         ParquetEncoding_DELTA_LENGTH_BYTE_ARRAY: 'DELTA_LENGTH_BYTE_ARRAY',             # <<<<<<<<<<<<<<
 *         ParquetEncoding_DELTA_BYTE_ARRAY: 'DELTA_BYTE_ARRAY',
 *         ParquetEncoding_RLE_DICTIONARY: 'RLE_DICTIONARY',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::DELTA_LENGTH_BYTE_ARRAY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DELTA_LENGTH_BYTE_ARRAY) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":953
 *         ParquetEncoding_DELTA_BINARY_PACKED: 'DELTA_BINARY_PACKED',
 *         ParquetEncoding_DELTA_LENGTH_BYTE_ARRAY: 'DELTA_LENGTH_BYTE_ARRAY',
 *         ParquetEncoding_DELTA_BYTE_ARRAY: 'DELTA_BYTE_ARRAY',             # <<<<<<<<<<<<<<
 *         ParquetEncoding_RLE_DICTIONARY: 'RLE_DICTIONARY',
 *     }.get(encoding_, 'UNKNOWN')
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::DELTA_BYTE_ARRAY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_DELTA_BYTE_ARRAY) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":954
 *         ParquetEncoding_DELTA_LENGTH_BYTE_ARRAY: 'DELTA_LENGTH_BYTE_ARRAY',
 *         ParquetEncoding_DELTA_BYTE_ARRAY: 'DELTA_BYTE_ARRAY',
 *         ParquetEncoding_RLE_DICTIONARY: 'RLE_DICTIONARY',             # <<<<<<<<<<<<<<
 *     }.get(encoding_, 'UNKNOWN')
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type( parquet::Encoding::RLE_DICTIONARY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_RLE_DICTIONARY) < 0) __PYX_ERR(0, 947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":955
 *         ParquetEncoding_DELTA_BYTE_ARRAY: 'DELTA_BYTE_ARRAY',
 *         ParquetEncoding_RLE_DICTIONARY: 'RLE_DICTIONARY',
 *     }.get(encoding_, 'UNKNOWN')             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type(__pyx_v_encoding_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_t_1, __pyx_t_2, __pyx_n_u_UNKNOWN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __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;

  /* "pyarrow/_parquet.pyx":945
 * 
 * 
 * cdef encoding_name_from_enum(ParquetEncoding encoding_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetEncoding_PLAIN: 'PLAIN',
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.encoding_name_from_enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":958
 * 
 * 
 * cdef compression_name_from_enum(ParquetCompression compression_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetCompression_UNCOMPRESSED: 'UNCOMPRESSED',
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_compression_name_from_enum(enum  parquet::Compression::type __pyx_v_compression_) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("compression_name_from_enum", 0);

  /* "pyarrow/_parquet.pyx":959
 * 
 * cdef compression_name_from_enum(ParquetCompression compression_):
 *     return {             # <<<<<<<<<<<<<<
 *         ParquetCompression_UNCOMPRESSED: 'UNCOMPRESSED',
 *         ParquetCompression_SNAPPY: 'SNAPPY',
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pyarrow/_parquet.pyx":960
 * cdef compression_name_from_enum(ParquetCompression compression_):
 *     return {
 *         ParquetCompression_UNCOMPRESSED: 'UNCOMPRESSED',             # <<<<<<<<<<<<<<
 *         ParquetCompression_SNAPPY: 'SNAPPY',
 *         ParquetCompression_GZIP: 'GZIP',
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type( parquet::Compression::UNCOMPRESSED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_UNCOMPRESSED) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":961
 *     return {
 *         ParquetCompression_UNCOMPRESSED: 'UNCOMPRESSED',
 *         ParquetCompression_SNAPPY: 'SNAPPY',             # <<<<<<<<<<<<<<
 *         ParquetCompression_GZIP: 'GZIP',
 *         ParquetCompression_LZO: 'LZO',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type( parquet::Compression::SNAPPY); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_SNAPPY) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":962
 *         ParquetCompression_UNCOMPRESSED: 'UNCOMPRESSED',
 *         ParquetCompression_SNAPPY: 'SNAPPY',
 *         ParquetCompression_GZIP: 'GZIP',             # <<<<<<<<<<<<<<
 *         ParquetCompression_LZO: 'LZO',
 *         ParquetCompression_BROTLI: 'BROTLI',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type( parquet::Compression::GZIP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_GZIP) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":963
 *         ParquetCompression_SNAPPY: 'SNAPPY',
 *         ParquetCompression_GZIP: 'GZIP',
 *         ParquetCompression_LZO: 'LZO',             # <<<<<<<<<<<<<<
 *         ParquetCompression_BROTLI: 'BROTLI',
 *         ParquetCompression_LZ4: 'LZ4',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type( parquet::Compression::LZO); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_LZO) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":964
 *         ParquetCompression_GZIP: 'GZIP',
 *         ParquetCompression_LZO: 'LZO',
 *         ParquetCompression_BROTLI: 'BROTLI',             # <<<<<<<<<<<<<<
 *         ParquetCompression_LZ4: 'LZ4',
 *         ParquetCompression_ZSTD: 'ZSTD',
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type( parquet::Compression::BROTLI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_BROTLI) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":965
 *         ParquetCompression_LZO: 'LZO',
 *         ParquetCompression_BROTLI: 'BROTLI',
 *         ParquetCompression_LZ4: 'LZ4',             # <<<<<<<<<<<<<<
 *         ParquetCompression_ZSTD: 'ZSTD',
 *     }.get(compression_, 'UNKNOWN')
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type( parquet::Compression::LZ4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_LZ4) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":966
 *         ParquetCompression_BROTLI: 'BROTLI',
 *         ParquetCompression_LZ4: 'LZ4',
 *         ParquetCompression_ZSTD: 'ZSTD',             # <<<<<<<<<<<<<<
 *     }.get(compression_, 'UNKNOWN')
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type( parquet::Compression::ZSTD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_n_u_ZSTD) < 0) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":967
 *         ParquetCompression_LZ4: 'LZ4',
 *         ParquetCompression_ZSTD: 'ZSTD',
 *     }.get(compression_, 'UNKNOWN')             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type(__pyx_v_compression_); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_t_1, __pyx_t_2, __pyx_n_u_UNKNOWN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __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;

  /* "pyarrow/_parquet.pyx":958
 * 
 * 
 * cdef compression_name_from_enum(ParquetCompression compression_):             # <<<<<<<<<<<<<<
 *     return {
 *         ParquetCompression_UNCOMPRESSED: 'UNCOMPRESSED',
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._parquet.compression_name_from_enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":970
 * 
 * 
 * cdef int check_compression_name(name) except -1:             # <<<<<<<<<<<<<<
 *     if name.upper() not in {'NONE', 'SNAPPY', 'GZIP', 'LZO', 'BROTLI', 'LZ4',
 *                             'ZSTD'}:
 */

static int __pyx_f_7pyarrow_8_parquet_check_compression_name(PyObject *__pyx_v_name) {
  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;
  PyObject *__pyx_t_6 = NULL;
  __Pyx_RefNannySetupContext("check_compression_name", 0);

  /* "pyarrow/_parquet.pyx":971
 * 
 * cdef int check_compression_name(name) except -1:
 *     if name.upper() not in {'NONE', 'SNAPPY', 'GZIP', 'LZO', 'BROTLI', 'LZ4',             # <<<<<<<<<<<<<<
 *                             'ZSTD'}:
 *         raise ArrowException("Unsupported compression: " + name)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_upper); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 971, __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(0, 971, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_NONE, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_SNAPPY, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_GZIP, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_LZO, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_BROTLI, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_LZ4, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_ZSTD, Py_NE)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 971, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (unlikely(__pyx_t_5)) {

    /* "pyarrow/_parquet.pyx":973
 *     if name.upper() not in {'NONE', 'SNAPPY', 'GZIP', 'LZO', 'BROTLI', 'LZ4',
 *                             'ZSTD'}:
 *         raise ArrowException("Unsupported compression: " + name)             # <<<<<<<<<<<<<<
 *     return 0
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ArrowException); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyNumber_Add(__pyx_kp_u_Unsupported_compression, __pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 973, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 973, __pyx_L1_error)

    /* "pyarrow/_parquet.pyx":971
 * 
 * cdef int check_compression_name(name) except -1:
 *     if name.upper() not in {'NONE', 'SNAPPY', 'GZIP', 'LZO', 'BROTLI', 'LZ4',             # <<<<<<<<<<<<<<
 *                             'ZSTD'}:
 *         raise ArrowException("Unsupported compression: " + name)
 */
  }

  /* "pyarrow/_parquet.pyx":974
 *                             'ZSTD'}:
 *         raise ArrowException("Unsupported compression: " + name)
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":970
 * 
 * 
 * cdef int check_compression_name(name) except -1:             # <<<<<<<<<<<<<<
 *     if name.upper() not in {'NONE', 'SNAPPY', 'GZIP', 'LZO', 'BROTLI', 'LZ4',
 *                             'ZSTD'}:
 */

  /* 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_6);
  __Pyx_AddTraceback("pyarrow._parquet.check_compression_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":977
 * 
 * 
 * cdef ParquetCompression compression_from_name(name):             # <<<<<<<<<<<<<<
 *     name = name.upper()
 *     if name == 'SNAPPY':
 */

static enum  parquet::Compression::type __pyx_f_7pyarrow_8_parquet_compression_from_name(PyObject *__pyx_v_name) {
  enum  parquet::Compression::type __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  __Pyx_RefNannySetupContext("compression_from_name", 0);
  __Pyx_INCREF(__pyx_v_name);

  /* "pyarrow/_parquet.pyx":978
 * 
 * cdef ParquetCompression compression_from_name(name):
 *     name = name.upper()             # <<<<<<<<<<<<<<
 *     if name == 'SNAPPY':
 *         return ParquetCompression_SNAPPY
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_upper); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 978, __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(0, 978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":979
 * cdef ParquetCompression compression_from_name(name):
 *     name = name.upper()
 *     if name == 'SNAPPY':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_SNAPPY
 *     elif name == 'GZIP':
 */
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_SNAPPY, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 979, __pyx_L1_error)
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":980
 *     name = name.upper()
 *     if name == 'SNAPPY':
 *         return ParquetCompression_SNAPPY             # <<<<<<<<<<<<<<
 *     elif name == 'GZIP':
 *         return ParquetCompression_GZIP
 */
    __pyx_r =  parquet::Compression::SNAPPY;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":979
 * cdef ParquetCompression compression_from_name(name):
 *     name = name.upper()
 *     if name == 'SNAPPY':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_SNAPPY
 *     elif name == 'GZIP':
 */
  }

  /* "pyarrow/_parquet.pyx":981
 *     if name == 'SNAPPY':
 *         return ParquetCompression_SNAPPY
 *     elif name == 'GZIP':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_GZIP
 *     elif name == 'LZO':
 */
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_GZIP, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 981, __pyx_L1_error)
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":982
 *         return ParquetCompression_SNAPPY
 *     elif name == 'GZIP':
 *         return ParquetCompression_GZIP             # <<<<<<<<<<<<<<
 *     elif name == 'LZO':
 *         return ParquetCompression_LZO
 */
    __pyx_r =  parquet::Compression::GZIP;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":981
 *     if name == 'SNAPPY':
 *         return ParquetCompression_SNAPPY
 *     elif name == 'GZIP':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_GZIP
 *     elif name == 'LZO':
 */
  }

  /* "pyarrow/_parquet.pyx":983
 *     elif name == 'GZIP':
 *         return ParquetCompression_GZIP
 *     elif name == 'LZO':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_LZO
 *     elif name == 'BROTLI':
 */
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_LZO, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 983, __pyx_L1_error)
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":984
 *         return ParquetCompression_GZIP
 *     elif name == 'LZO':
 *         return ParquetCompression_LZO             # <<<<<<<<<<<<<<
 *     elif name == 'BROTLI':
 *         return ParquetCompression_BROTLI
 */
    __pyx_r =  parquet::Compression::LZO;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":983
 *     elif name == 'GZIP':
 *         return ParquetCompression_GZIP
 *     elif name == 'LZO':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_LZO
 *     elif name == 'BROTLI':
 */
  }

  /* "pyarrow/_parquet.pyx":985
 *     elif name == 'LZO':
 *         return ParquetCompression_LZO
 *     elif name == 'BROTLI':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_BROTLI
 *     elif name == 'LZ4':
 */
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_BROTLI, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 985, __pyx_L1_error)
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":986
 *         return ParquetCompression_LZO
 *     elif name == 'BROTLI':
 *         return ParquetCompression_BROTLI             # <<<<<<<<<<<<<<
 *     elif name == 'LZ4':
 *         return ParquetCompression_LZ4
 */
    __pyx_r =  parquet::Compression::BROTLI;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":985
 *     elif name == 'LZO':
 *         return ParquetCompression_LZO
 *     elif name == 'BROTLI':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_BROTLI
 *     elif name == 'LZ4':
 */
  }

  /* "pyarrow/_parquet.pyx":987
 *     elif name == 'BROTLI':
 *         return ParquetCompression_BROTLI
 *     elif name == 'LZ4':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_LZ4
 *     elif name == 'ZSTD':
 */
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_LZ4, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 987, __pyx_L1_error)
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":988
 *         return ParquetCompression_BROTLI
 *     elif name == 'LZ4':
 *         return ParquetCompression_LZ4             # <<<<<<<<<<<<<<
 *     elif name == 'ZSTD':
 *         return ParquetCompression_ZSTD
 */
    __pyx_r =  parquet::Compression::LZ4;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":987
 *     elif name == 'BROTLI':
 *         return ParquetCompression_BROTLI
 *     elif name == 'LZ4':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_LZ4
 *     elif name == 'ZSTD':
 */
  }

  /* "pyarrow/_parquet.pyx":989
 *     elif name == 'LZ4':
 *         return ParquetCompression_LZ4
 *     elif name == 'ZSTD':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_ZSTD
 *     else:
 */
  __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_v_name, __pyx_n_u_ZSTD, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 989, __pyx_L1_error)
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":990
 *         return ParquetCompression_LZ4
 *     elif name == 'ZSTD':
 *         return ParquetCompression_ZSTD             # <<<<<<<<<<<<<<
 *     else:
 *         return ParquetCompression_UNCOMPRESSED
 */
    __pyx_r =  parquet::Compression::ZSTD;
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":989
 *     elif name == 'LZ4':
 *         return ParquetCompression_LZ4
 *     elif name == 'ZSTD':             # <<<<<<<<<<<<<<
 *         return ParquetCompression_ZSTD
 *     else:
 */
  }

  /* "pyarrow/_parquet.pyx":992
 *         return ParquetCompression_ZSTD
 *     else:
 *         return ParquetCompression_UNCOMPRESSED             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*else*/ {
    __pyx_r =  parquet::Compression::UNCOMPRESSED;
    goto __pyx_L0;
  }

  /* "pyarrow/_parquet.pyx":977
 * 
 * 
 * cdef ParquetCompression compression_from_name(name):             # <<<<<<<<<<<<<<
 *     name = name.upper()
 *     if name == 'SNAPPY':
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_WriteUnraisable("pyarrow._parquet.compression_from_name", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = (enum  parquet::Compression::type) 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1005
 *         _column_idx_map
 * 
 *     def __cinit__(self, MemoryPool memory_pool=None):             # <<<<<<<<<<<<<<
 *         self.pool = maybe_unbox_memory_pool(memory_pool)
 *         self._metadata = None
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_13ParquetReader_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_13ParquetReader_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_memory_pool,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)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_memory_pool);
          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(0, 1005, __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_memory_pool = ((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)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(0, 1005, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_memory_pool), __pyx_ptype_7pyarrow_3lib_MemoryPool, 1, "memory_pool", 0))) __PYX_ERR(0, 1005, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), __pyx_v_memory_pool);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7pyarrow_8_parquet_13ParquetReader___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pyarrow/_parquet.pyx":1006
 * 
 *     def __cinit__(self, MemoryPool memory_pool=None):
 *         self.pool = maybe_unbox_memory_pool(memory_pool)             # <<<<<<<<<<<<<<
 *         self._metadata = None
 * 
 */
  __pyx_v_self->pool = __pyx_f_7pyarrow_3lib_maybe_unbox_memory_pool(__pyx_v_memory_pool);

  /* "pyarrow/_parquet.pyx":1007
 *     def __cinit__(self, MemoryPool memory_pool=None):
 *         self.pool = maybe_unbox_memory_pool(memory_pool)
 *         self._metadata = None             # <<<<<<<<<<<<<<
 * 
 *     def open(self, object source, bint use_memory_map=True,
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_metadata);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_metadata));
  __pyx_v_self->_metadata = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)Py_None);

  /* "pyarrow/_parquet.pyx":1005
 *         _column_idx_map
 * 
 *     def __cinit__(self, MemoryPool memory_pool=None):             # <<<<<<<<<<<<<<
 *         self.pool = maybe_unbox_memory_pool(memory_pool)
 *         self._metadata = None
 */

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

/* "pyarrow/_parquet.pyx":1009
 *         self._metadata = None
 * 
 *     def open(self, object source, bint use_memory_map=True,             # <<<<<<<<<<<<<<
 *              read_dictionary=None, FileMetaData metadata=None,
 *              int buffer_size=0):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_3open(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_2open[] = "ParquetReader.open(self, source, bool use_memory_map=True, read_dictionary=None, FileMetaData metadata=None, int buffer_size=0)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_3open(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_source = 0;
  int __pyx_v_use_memory_map;
  PyObject *__pyx_v_read_dictionary = 0;
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_metadata = 0;
  int __pyx_v_buffer_size;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("open (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_use_memory_map,&__pyx_n_s_read_dictionary,&__pyx_n_s_metadata,&__pyx_n_s_buffer_size,0};
    PyObject* values[5] = {0,0,0,0,0};

    /* "pyarrow/_parquet.pyx":1010
 * 
 *     def open(self, object source, bint use_memory_map=True,
 *              read_dictionary=None, FileMetaData metadata=None,             # <<<<<<<<<<<<<<
 *              int buffer_size=0):
 *         cdef:
 */
    values[2] = ((PyObject *)Py_None);
    values[3] = (PyObject *)((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)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_source)) != 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_use_memory_map);
          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_read_dictionary);
          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_metadata);
          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_buffer_size);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "open") < 0)) __PYX_ERR(0, 1009, __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);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_source = values[0];
    if (values[1]) {
      __pyx_v_use_memory_map = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_use_memory_map == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1009, __pyx_L3_error)
    } else {

      /* "pyarrow/_parquet.pyx":1009
 *         self._metadata = None
 * 
 *     def open(self, object source, bint use_memory_map=True,             # <<<<<<<<<<<<<<
 *              read_dictionary=None, FileMetaData metadata=None,
 *              int buffer_size=0):
 */
      __pyx_v_use_memory_map = ((int)1);
    }
    __pyx_v_read_dictionary = values[2];
    __pyx_v_metadata = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)values[3]);
    if (values[4]) {
      __pyx_v_buffer_size = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_buffer_size == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1011, __pyx_L3_error)
    } else {
      __pyx_v_buffer_size = ((int)0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("open", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1009, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_metadata), __pyx_ptype_7pyarrow_8_parquet_FileMetaData, 1, "metadata", 0))) __PYX_ERR(0, 1010, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_2open(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), __pyx_v_source, __pyx_v_use_memory_map, __pyx_v_read_dictionary, __pyx_v_metadata, __pyx_v_buffer_size);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_2open(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_source, int __pyx_v_use_memory_map, PyObject *__pyx_v_read_dictionary, struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_metadata, int __pyx_v_buffer_size) {
  std::shared_ptr<arrow::io::RandomAccessFile>  __pyx_v_rd_handle;
  std::shared_ptr< parquet::FileMetaData>  __pyx_v_c_metadata;
   parquet::ReaderProperties __pyx_v_properties;
  parquet::ArrowReaderProperties __pyx_v_arrow_props;
  parquet::arrow::FileReaderBuilder __pyx_v_builder;
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  std::shared_ptr< parquet::FileMetaData>  __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  __Pyx_RefNannySetupContext("open", 0);

  /* "pyarrow/_parquet.pyx":1015
 *             shared_ptr[RandomAccessFile] rd_handle
 *             shared_ptr[CFileMetaData] c_metadata
 *             CReaderProperties properties = default_reader_properties()             # <<<<<<<<<<<<<<
 *             ArrowReaderProperties arrow_props = (
 *                 default_arrow_reader_properties())
 */
  __pyx_v_properties = parquet::default_reader_properties();

  /* "pyarrow/_parquet.pyx":1017
 *             CReaderProperties properties = default_reader_properties()
 *             ArrowReaderProperties arrow_props = (
 *                 default_arrow_reader_properties())             # <<<<<<<<<<<<<<
 *             c_string path
 *             FileReaderBuilder builder
 */
  __pyx_v_arrow_props = parquet::default_arrow_reader_properties();

  /* "pyarrow/_parquet.pyx":1021
 *             FileReaderBuilder builder
 * 
 *         if metadata is not None:             # <<<<<<<<<<<<<<
 *             c_metadata = metadata.sp_metadata
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_metadata) != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":1022
 * 
 *         if metadata is not None:
 *             c_metadata = metadata.sp_metadata             # <<<<<<<<<<<<<<
 * 
 *         if buffer_size > 0:
 */
    __pyx_t_3 = __pyx_v_metadata->sp_metadata;
    __pyx_v_c_metadata = __pyx_t_3;

    /* "pyarrow/_parquet.pyx":1021
 *             FileReaderBuilder builder
 * 
 *         if metadata is not None:             # <<<<<<<<<<<<<<
 *             c_metadata = metadata.sp_metadata
 * 
 */
  }

  /* "pyarrow/_parquet.pyx":1024
 *             c_metadata = metadata.sp_metadata
 * 
 *         if buffer_size > 0:             # <<<<<<<<<<<<<<
 *             properties.enable_buffered_stream()
 *             properties.set_buffer_size(buffer_size)
 */
  __pyx_t_2 = ((__pyx_v_buffer_size > 0) != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":1025
 * 
 *         if buffer_size > 0:
 *             properties.enable_buffered_stream()             # <<<<<<<<<<<<<<
 *             properties.set_buffer_size(buffer_size)
 *         elif buffer_size == 0:
 */
    __pyx_v_properties.enable_buffered_stream();

    /* "pyarrow/_parquet.pyx":1026
 *         if buffer_size > 0:
 *             properties.enable_buffered_stream()
 *             properties.set_buffer_size(buffer_size)             # <<<<<<<<<<<<<<
 *         elif buffer_size == 0:
 *             properties.disable_buffered_stream()
 */
    __pyx_v_properties.set_buffer_size(__pyx_v_buffer_size);

    /* "pyarrow/_parquet.pyx":1024
 *             c_metadata = metadata.sp_metadata
 * 
 *         if buffer_size > 0:             # <<<<<<<<<<<<<<
 *             properties.enable_buffered_stream()
 *             properties.set_buffer_size(buffer_size)
 */
    goto __pyx_L4;
  }

  /* "pyarrow/_parquet.pyx":1027
 *             properties.enable_buffered_stream()
 *             properties.set_buffer_size(buffer_size)
 *         elif buffer_size == 0:             # <<<<<<<<<<<<<<
 *             properties.disable_buffered_stream()
 *         else:
 */
  __pyx_t_2 = ((__pyx_v_buffer_size == 0) != 0);
  if (likely(__pyx_t_2)) {

    /* "pyarrow/_parquet.pyx":1028
 *             properties.set_buffer_size(buffer_size)
 *         elif buffer_size == 0:
 *             properties.disable_buffered_stream()             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError('Buffer size must be larger than zero')
 */
    __pyx_v_properties.disable_buffered_stream();

    /* "pyarrow/_parquet.pyx":1027
 *             properties.enable_buffered_stream()
 *             properties.set_buffer_size(buffer_size)
 *         elif buffer_size == 0:             # <<<<<<<<<<<<<<
 *             properties.disable_buffered_stream()
 *         else:
 */
    goto __pyx_L4;
  }

  /* "pyarrow/_parquet.pyx":1030
 *             properties.disable_buffered_stream()
 *         else:
 *             raise ValueError('Buffer size must be larger than zero')             # <<<<<<<<<<<<<<
 * 
 *         self.source = source
 */
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1030, __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, 1030, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "pyarrow/_parquet.pyx":1032
 *             raise ValueError('Buffer size must be larger than zero')
 * 
 *         self.source = source             # <<<<<<<<<<<<<<
 * 
 *         get_reader(source, use_memory_map, &rd_handle)
 */
  __Pyx_INCREF(__pyx_v_source);
  __Pyx_GIVEREF(__pyx_v_source);
  __Pyx_GOTREF(__pyx_v_self->source);
  __Pyx_DECREF(__pyx_v_self->source);
  __pyx_v_self->source = __pyx_v_source;

  /* "pyarrow/_parquet.pyx":1034
 *         self.source = source
 * 
 *         get_reader(source, use_memory_map, &rd_handle)             # <<<<<<<<<<<<<<
 *         with nogil:
 *             check_status(builder.Open(rd_handle, properties, c_metadata))
 */
  __pyx_t_4 = __pyx_f_7pyarrow_3lib_get_reader(__pyx_v_source, __pyx_v_use_memory_map, (&__pyx_v_rd_handle)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":1035
 * 
 *         get_reader(source, use_memory_map, &rd_handle)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(builder.Open(rd_handle, properties, c_metadata))
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1036
 *         get_reader(source, use_memory_map, &rd_handle)
 *         with nogil:
 *             check_status(builder.Open(rd_handle, properties, c_metadata))             # <<<<<<<<<<<<<<
 * 
 *         # Set up metadata
 */
        __pyx_t_5 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_builder.Open(__pyx_v_rd_handle, __pyx_v_properties, __pyx_v_c_metadata)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1036, __pyx_L6_error)
      }

      /* "pyarrow/_parquet.pyx":1035
 * 
 *         get_reader(source, use_memory_map, &rd_handle)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(builder.Open(rd_handle, properties, c_metadata))
 * 
 */
      /*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:;
      }
  }

  /* "pyarrow/_parquet.pyx":1039
 * 
 *         # Set up metadata
 *         with nogil:             # <<<<<<<<<<<<<<
 *             c_metadata = builder.raw_reader().metadata()
 *         self._metadata = result = FileMetaData()
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1040
 *         # Set up metadata
 *         with nogil:
 *             c_metadata = builder.raw_reader().metadata()             # <<<<<<<<<<<<<<
 *         self._metadata = result = FileMetaData()
 *         result.init(c_metadata)
 */
        __pyx_v_c_metadata = __pyx_v_builder.raw_reader()->metadata();
      }

      /* "pyarrow/_parquet.pyx":1039
 * 
 *         # Set up metadata
 *         with nogil:             # <<<<<<<<<<<<<<
 *             c_metadata = builder.raw_reader().metadata()
 *         self._metadata = result = FileMetaData()
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L10;
        }
        __pyx_L10:;
      }
  }

  /* "pyarrow/_parquet.pyx":1041
 *         with nogil:
 *             c_metadata = builder.raw_reader().metadata()
 *         self._metadata = result = FileMetaData()             # <<<<<<<<<<<<<<
 *         result.init(c_metadata)
 * 
 */
  __pyx_t_4 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_FileMetaData)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_v_self->_metadata);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->_metadata));
  __pyx_v_self->_metadata = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_t_4);
  __Pyx_INCREF(__pyx_t_4);
  __pyx_v_result = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":1042
 *             c_metadata = builder.raw_reader().metadata()
 *         self._metadata = result = FileMetaData()
 *         result.init(c_metadata)             # <<<<<<<<<<<<<<
 * 
 *         if read_dictionary is not None:
 */
  __pyx_t_4 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_FileMetaData *)__pyx_v_result->__pyx_vtab)->init(__pyx_v_result, __pyx_v_c_metadata); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1042, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_parquet.pyx":1044
 *         result.init(c_metadata)
 * 
 *         if read_dictionary is not None:             # <<<<<<<<<<<<<<
 *             self._set_read_dictionary(read_dictionary, &arrow_props)
 * 
 */
  __pyx_t_2 = (__pyx_v_read_dictionary != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1045
 * 
 *         if read_dictionary is not None:
 *             self._set_read_dictionary(read_dictionary, &arrow_props)             # <<<<<<<<<<<<<<
 * 
 *         with nogil:
 */
    __pyx_t_4 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self->__pyx_vtab)->_set_read_dictionary(__pyx_v_self, __pyx_v_read_dictionary, (&__pyx_v_arrow_props)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1045, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "pyarrow/_parquet.pyx":1044
 *         result.init(c_metadata)
 * 
 *         if read_dictionary is not None:             # <<<<<<<<<<<<<<
 *             self._set_read_dictionary(read_dictionary, &arrow_props)
 * 
 */
  }

  /* "pyarrow/_parquet.pyx":1047
 *             self._set_read_dictionary(read_dictionary, &arrow_props)
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(builder.memory_pool(self.pool)
 *                          .properties(arrow_props)
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1048
 * 
 *         with nogil:
 *             check_status(builder.memory_pool(self.pool)             # <<<<<<<<<<<<<<
 *                          .properties(arrow_props)
 *                          .Build(&self.reader))
 */
        __pyx_t_5 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_builder.memory_pool(__pyx_v_self->pool)->properties(__pyx_v_arrow_props)->Build((&__pyx_v_self->reader))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1048, __pyx_L13_error)
      }

      /* "pyarrow/_parquet.pyx":1047
 *             self._set_read_dictionary(read_dictionary, &arrow_props)
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(builder.memory_pool(self.pool)
 *                          .properties(arrow_props)
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L14;
        }
        __pyx_L13_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L14:;
      }
  }

  /* "pyarrow/_parquet.pyx":1009
 *         self._metadata = None
 * 
 *     def open(self, object source, bint use_memory_map=True,             # <<<<<<<<<<<<<<
 *              read_dictionary=None, FileMetaData metadata=None,
 *              int buffer_size=0):
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.open", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1052
 *                          .Build(&self.reader))
 * 
 *     cdef _set_read_dictionary(self, read_dictionary,             # <<<<<<<<<<<<<<
 *                               ArrowReaderProperties* props):
 *         for column in read_dictionary:
 */

static PyObject *__pyx_f_7pyarrow_8_parquet_13ParquetReader__set_read_dictionary(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_read_dictionary, parquet::ArrowReaderProperties *__pyx_v_props) {
  PyObject *__pyx_v_column = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  __Pyx_RefNannySetupContext("_set_read_dictionary", 0);

  /* "pyarrow/_parquet.pyx":1054
 *     cdef _set_read_dictionary(self, read_dictionary,
 *                               ArrowReaderProperties* props):
 *         for column in read_dictionary:             # <<<<<<<<<<<<<<
 *             if not isinstance(column, int):
 *                 column = self.column_name_idx(column)
 */
  if (likely(PyList_CheckExact(__pyx_v_read_dictionary)) || PyTuple_CheckExact(__pyx_v_read_dictionary)) {
    __pyx_t_1 = __pyx_v_read_dictionary; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_read_dictionary); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1054, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1054, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1054, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1054, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 1054, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1054, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      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(0, 1054, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "pyarrow/_parquet.pyx":1055
 *                               ArrowReaderProperties* props):
 *         for column in read_dictionary:
 *             if not isinstance(column, int):             # <<<<<<<<<<<<<<
 *                 column = self.column_name_idx(column)
 *             props.set_read_dictionary(column, True)
 */
    __pyx_t_5 = PyInt_Check(__pyx_v_column); 
    __pyx_t_6 = ((!(__pyx_t_5 != 0)) != 0);
    if (__pyx_t_6) {

      /* "pyarrow/_parquet.pyx":1056
 *         for column in read_dictionary:
 *             if not isinstance(column, int):
 *                 column = self.column_name_idx(column)             # <<<<<<<<<<<<<<
 *             props.set_read_dictionary(column, True)
 * 
 */
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_column_name_idx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1056, __pyx_L1_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_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_v_column) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_column);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1056, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF_SET(__pyx_v_column, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "pyarrow/_parquet.pyx":1055
 *                               ArrowReaderProperties* props):
 *         for column in read_dictionary:
 *             if not isinstance(column, int):             # <<<<<<<<<<<<<<
 *                 column = self.column_name_idx(column)
 *             props.set_read_dictionary(column, True)
 */
    }

    /* "pyarrow/_parquet.pyx":1057
 *             if not isinstance(column, int):
 *                 column = self.column_name_idx(column)
 *             props.set_read_dictionary(column, True)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_column); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1057, __pyx_L1_error)
    __pyx_v_props->set_read_dictionary(__pyx_t_9, 1);

    /* "pyarrow/_parquet.pyx":1054
 *     cdef _set_read_dictionary(self, read_dictionary,
 *                               ArrowReaderProperties* props):
 *         for column in read_dictionary:             # <<<<<<<<<<<<<<
 *             if not isinstance(column, int):
 *                 column = self.column_name_idx(column)
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":1052
 *                          .Build(&self.reader))
 * 
 *     cdef _set_read_dictionary(self, read_dictionary,             # <<<<<<<<<<<<<<
 *                               ArrowReaderProperties* props):
 *         for column in read_dictionary:
 */

  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader._set_read_dictionary", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_column);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1060
 * 
 *     @property
 *     def column_paths(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             FileMetaData container = self.metadata
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_12column_paths_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_12column_paths_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_12column_paths___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_12column_paths___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self) {
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_container = 0;
   parquet::FileMetaData const *__pyx_v_metadata;
  std::vector<std::string>  __pyx_v_path;
  int __pyx_v_i;
  PyObject *__pyx_v_paths = NULL;
  std::string __pyx_8genexpr1__pyx_v_x;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
   parquet::FileMetaData *__pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  std::vector<std::string> ::iterator __pyx_t_6;
  std::string __pyx_t_7;
  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("__get__", 0);

  /* "pyarrow/_parquet.pyx":1062
 *     def column_paths(self):
 *         cdef:
 *             FileMetaData container = self.metadata             # <<<<<<<<<<<<<<
 *             const CFileMetaData* metadata = container._metadata
 *             vector[c_string] path
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_metadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_7pyarrow_8_parquet_FileMetaData))))) __PYX_ERR(0, 1062, __pyx_L1_error)
  __pyx_v_container = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":1063
 *         cdef:
 *             FileMetaData container = self.metadata
 *             const CFileMetaData* metadata = container._metadata             # <<<<<<<<<<<<<<
 *             vector[c_string] path
 *             int i = 0
 */
  __pyx_t_2 = __pyx_v_container->_metadata;
  __pyx_v_metadata = __pyx_t_2;

  /* "pyarrow/_parquet.pyx":1065
 *             const CFileMetaData* metadata = container._metadata
 *             vector[c_string] path
 *             int i = 0             # <<<<<<<<<<<<<<
 * 
 *         paths = []
 */
  __pyx_v_i = 0;

  /* "pyarrow/_parquet.pyx":1067
 *             int i = 0
 * 
 *         paths = []             # <<<<<<<<<<<<<<
 *         for i in range(0, metadata.num_columns()):
 *             path = (metadata.schema().Column(i)
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_paths = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":1068
 * 
 *         paths = []
 *         for i in range(0, metadata.num_columns()):             # <<<<<<<<<<<<<<
 *             path = (metadata.schema().Column(i)
 *                     .path().get().ToDotVector())
 */
  __pyx_t_3 = __pyx_v_metadata->num_columns();
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "pyarrow/_parquet.pyx":1070
 *         for i in range(0, metadata.num_columns()):
 *             path = (metadata.schema().Column(i)
 *                     .path().get().ToDotVector())             # <<<<<<<<<<<<<<
 *             paths.append([frombytes(x) for x in path])
 * 
 */
    __pyx_v_path = __pyx_v_metadata->schema()->Column(__pyx_v_i)->path().get()->ToDotVector();

    /* "pyarrow/_parquet.pyx":1071
 *             path = (metadata.schema().Column(i)
 *                     .path().get().ToDotVector())
 *             paths.append([frombytes(x) for x in path])             # <<<<<<<<<<<<<<
 * 
 *         return paths
 */
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1071, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __pyx_v_path.begin();
      for (;;) {
        if (!(__pyx_t_6 != __pyx_v_path.end())) break;
        __pyx_t_7 = *__pyx_t_6;
        ++__pyx_t_6;
        __pyx_8genexpr1__pyx_v_x = __pyx_t_7;
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1071, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_8genexpr1__pyx_v_x); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1071, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
          }
        }
        __pyx_t_8 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1071, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 1071, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
    } /* exit inner scope */
    __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_paths, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1071, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "pyarrow/_parquet.pyx":1073
 *             paths.append([frombytes(x) for x in path])
 * 
 *         return paths             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_paths);
  __pyx_r = __pyx_v_paths;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1060
 * 
 *     @property
 *     def column_paths(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             FileMetaData container = self.metadata
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.column_paths.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_container);
  __Pyx_XDECREF(__pyx_v_paths);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1076
 * 
 *     @property
 *     def metadata(self):             # <<<<<<<<<<<<<<
 *         return self._metadata
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_8metadata_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_8metadata_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_8metadata___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_8metadata___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":1077
 *     @property
 *     def metadata(self):
 *         return self._metadata             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->_metadata));
  __pyx_r = ((PyObject *)__pyx_v_self->_metadata);
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1076
 * 
 *     @property
 *     def metadata(self):             # <<<<<<<<<<<<<<
 *         return self._metadata
 * 
 */

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

/* "pyarrow/_parquet.pyx":1080
 * 
 *     @property
 *     def num_row_groups(self):             # <<<<<<<<<<<<<<
 *         return self.reader.get().num_row_groups()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_14num_row_groups_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_14num_row_groups_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_14num_row_groups___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self));

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

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

  /* "pyarrow/_parquet.pyx":1081
 *     @property
 *     def num_row_groups(self):
 *         return self.reader.get().num_row_groups()             # <<<<<<<<<<<<<<
 * 
 *     def set_use_threads(self, bint use_threads):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->reader.get()->num_row_groups()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1080
 * 
 *     @property
 *     def num_row_groups(self):             # <<<<<<<<<<<<<<
 *         return self.reader.get().num_row_groups()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.num_row_groups.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1083
 *         return self.reader.get().num_row_groups()
 * 
 *     def set_use_threads(self, bint use_threads):             # <<<<<<<<<<<<<<
 *         self.reader.get().set_use_threads(use_threads)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_5set_use_threads(PyObject *__pyx_v_self, PyObject *__pyx_arg_use_threads); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_4set_use_threads[] = "ParquetReader.set_use_threads(self, bool use_threads)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_5set_use_threads(PyObject *__pyx_v_self, PyObject *__pyx_arg_use_threads) {
  int __pyx_v_use_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_use_threads (wrapper)", 0);
  assert(__pyx_arg_use_threads); {
    __pyx_v_use_threads = __Pyx_PyObject_IsTrue(__pyx_arg_use_threads); if (unlikely((__pyx_v_use_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1083, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.set_use_threads", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_4set_use_threads(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), ((int)__pyx_v_use_threads));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_4set_use_threads(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_use_threads) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_use_threads", 0);

  /* "pyarrow/_parquet.pyx":1084
 * 
 *     def set_use_threads(self, bint use_threads):
 *         self.reader.get().set_use_threads(use_threads)             # <<<<<<<<<<<<<<
 * 
 *     def read_row_group(self, int i, column_indices=None,
 */
  __pyx_v_self->reader.get()->set_use_threads(__pyx_v_use_threads);

  /* "pyarrow/_parquet.pyx":1083
 *         return self.reader.get().num_row_groups()
 * 
 *     def set_use_threads(self, bint use_threads):             # <<<<<<<<<<<<<<
 *         self.reader.get().set_use_threads(use_threads)
 * 
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1086
 *         self.reader.get().set_use_threads(use_threads)
 * 
 *     def read_row_group(self, int i, column_indices=None,             # <<<<<<<<<<<<<<
 *                        bint use_threads=True):
 *         return self.read_row_groups([i], column_indices, use_threads)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_7read_row_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_6read_row_group[] = "ParquetReader.read_row_group(self, int i, column_indices=None, bool use_threads=True)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_7read_row_group(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_i;
  PyObject *__pyx_v_column_indices = 0;
  int __pyx_v_use_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("read_row_group (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_i,&__pyx_n_s_column_indices,&__pyx_n_s_use_threads,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_i)) != 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_column_indices);
          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_use_threads);
          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_row_group") < 0)) __PYX_ERR(0, 1086, __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_i = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_i == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1086, __pyx_L3_error)
    __pyx_v_column_indices = values[1];
    if (values[2]) {
      __pyx_v_use_threads = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_use_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1087, __pyx_L3_error)
    } else {

      /* "pyarrow/_parquet.pyx":1087
 * 
 *     def read_row_group(self, int i, column_indices=None,
 *                        bint use_threads=True):             # <<<<<<<<<<<<<<
 *         return self.read_row_groups([i], column_indices, use_threads)
 * 
 */
      __pyx_v_use_threads = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("read_row_group", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1086, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_row_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_6read_row_group(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), __pyx_v_i, __pyx_v_column_indices, __pyx_v_use_threads);

  /* "pyarrow/_parquet.pyx":1086
 *         self.reader.get().set_use_threads(use_threads)
 * 
 *     def read_row_group(self, int i, column_indices=None,             # <<<<<<<<<<<<<<
 *                        bint use_threads=True):
 *         return self.read_row_groups([i], column_indices, use_threads)
 */

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_6read_row_group(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_i, PyObject *__pyx_v_column_indices, int __pyx_v_use_threads) {
  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;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  __Pyx_RefNannySetupContext("read_row_group", 0);

  /* "pyarrow/_parquet.pyx":1088
 *     def read_row_group(self, int i, column_indices=None,
 *                        bint use_threads=True):
 *         return self.read_row_groups([i], column_indices, use_threads)             # <<<<<<<<<<<<<<
 * 
 *     def read_row_groups(self, row_groups not None, column_indices=None,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_read_row_groups); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_use_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  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_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_4, __pyx_v_column_indices, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1088, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_t_4, __pyx_v_column_indices, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1088, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1088, __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_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_t_4);
    __Pyx_INCREF(__pyx_v_column_indices);
    __Pyx_GIVEREF(__pyx_v_column_indices);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_column_indices);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, __pyx_t_3);
    __pyx_t_4 = 0;
    __pyx_t_3 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1086
 *         self.reader.get().set_use_threads(use_threads)
 * 
 *     def read_row_group(self, int i, column_indices=None,             # <<<<<<<<<<<<<<
 *                        bint use_threads=True):
 *         return self.read_row_groups([i], column_indices, use_threads)
 */

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_row_group", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1090
 *         return self.read_row_groups([i], column_indices, use_threads)
 * 
 *     def read_row_groups(self, row_groups not None, column_indices=None,             # <<<<<<<<<<<<<<
 *                         bint use_threads=True):
 *         cdef:
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_9read_row_groups(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_8read_row_groups[] = "ParquetReader.read_row_groups(self, row_groups, column_indices=None, bool use_threads=True)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_9read_row_groups(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_row_groups = 0;
  PyObject *__pyx_v_column_indices = 0;
  int __pyx_v_use_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("read_row_groups (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_row_groups,&__pyx_n_s_column_indices,&__pyx_n_s_use_threads,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_row_groups)) != 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_column_indices);
          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_use_threads);
          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_row_groups") < 0)) __PYX_ERR(0, 1090, __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_row_groups = values[0];
    __pyx_v_column_indices = values[1];
    if (values[2]) {
      __pyx_v_use_threads = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_use_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1091, __pyx_L3_error)
    } else {

      /* "pyarrow/_parquet.pyx":1091
 * 
 *     def read_row_groups(self, row_groups not None, column_indices=None,
 *                         bint use_threads=True):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CTable] ctable
 */
      __pyx_v_use_threads = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("read_row_groups", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1090, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_row_groups", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(((PyObject *)__pyx_v_row_groups) == Py_None)) {
    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "row_groups"); __PYX_ERR(0, 1090, __pyx_L1_error)
  }
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_8read_row_groups(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), __pyx_v_row_groups, __pyx_v_column_indices, __pyx_v_use_threads);

  /* "pyarrow/_parquet.pyx":1090
 *         return self.read_row_groups([i], column_indices, use_threads)
 * 
 *     def read_row_groups(self, row_groups not None, column_indices=None,             # <<<<<<<<<<<<<<
 *                         bint use_threads=True):
 *         cdef:
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_8read_row_groups(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_row_groups, PyObject *__pyx_v_column_indices, int __pyx_v_use_threads) {
  std::shared_ptr< arrow::Table>  __pyx_v_ctable;
  std::vector<int>  __pyx_v_c_row_groups;
  std::vector<int>  __pyx_v_c_column_indices;
  PyObject *__pyx_v_row_group = NULL;
  PyObject *__pyx_v_index = NULL;
  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;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  int __pyx_t_8;
  int __pyx_t_9;
  __Pyx_RefNannySetupContext("read_row_groups", 0);

  /* "pyarrow/_parquet.pyx":1097
 *             vector[int] c_column_indices
 * 
 *         if use_threads:             # <<<<<<<<<<<<<<
 *             self.set_use_threads(use_threads)
 * 
 */
  __pyx_t_1 = (__pyx_v_use_threads != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1098
 * 
 *         if use_threads:
 *             self.set_use_threads(use_threads)             # <<<<<<<<<<<<<<
 * 
 *         for row_group in row_groups:
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_use_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1098, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_use_threads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1098, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    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_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1098, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1097
 *             vector[int] c_column_indices
 * 
 *         if use_threads:             # <<<<<<<<<<<<<<
 *             self.set_use_threads(use_threads)
 * 
 */
  }

  /* "pyarrow/_parquet.pyx":1100
 *             self.set_use_threads(use_threads)
 * 
 *         for row_group in row_groups:             # <<<<<<<<<<<<<<
 *             c_row_groups.push_back(row_group)
 * 
 */
  if (likely(PyList_CheckExact(__pyx_v_row_groups)) || PyTuple_CheckExact(__pyx_v_row_groups)) {
    __pyx_t_2 = __pyx_v_row_groups; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
  } else {
    __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_row_groups); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1100, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_7)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1100, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1100, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_7(__pyx_t_2);
      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(0, 1100, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XDECREF_SET(__pyx_v_row_group, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyarrow/_parquet.pyx":1101
 * 
 *         for row_group in row_groups:
 *             c_row_groups.push_back(row_group)             # <<<<<<<<<<<<<<
 * 
 *         if column_indices is not None:
 */
    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_row_group); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1101, __pyx_L1_error)
    try {
      __pyx_v_c_row_groups.push_back(__pyx_t_8);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 1101, __pyx_L1_error)
    }

    /* "pyarrow/_parquet.pyx":1100
 *             self.set_use_threads(use_threads)
 * 
 *         for row_group in row_groups:             # <<<<<<<<<<<<<<
 *             c_row_groups.push_back(row_group)
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":1103
 *             c_row_groups.push_back(row_group)
 * 
 *         if column_indices is not None:             # <<<<<<<<<<<<<<
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)
 */
  __pyx_t_1 = (__pyx_v_column_indices != Py_None);
  __pyx_t_9 = (__pyx_t_1 != 0);
  if (__pyx_t_9) {

    /* "pyarrow/_parquet.pyx":1104
 * 
 *         if column_indices is not None:
 *             for index in column_indices:             # <<<<<<<<<<<<<<
 *                 c_column_indices.push_back(index)
 * 
 */
    if (likely(PyList_CheckExact(__pyx_v_column_indices)) || PyTuple_CheckExact(__pyx_v_column_indices)) {
      __pyx_t_2 = __pyx_v_column_indices; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_column_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1104, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1104, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 1104, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_7(__pyx_t_2);
        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(0, 1104, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "pyarrow/_parquet.pyx":1105
 *         if column_indices is not None:
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)             # <<<<<<<<<<<<<<
 * 
 *             with nogil:
 */
      __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_index); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1105, __pyx_L1_error)
      try {
        __pyx_v_c_column_indices.push_back(__pyx_t_8);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(0, 1105, __pyx_L1_error)
      }

      /* "pyarrow/_parquet.pyx":1104
 * 
 *         if column_indices is not None:
 *             for index in column_indices:             # <<<<<<<<<<<<<<
 *                 c_column_indices.push_back(index)
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1107
 *                 c_column_indices.push_back(index)
 * 
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadRowGroups(c_row_groups, c_column_indices,
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_parquet.pyx":1108
 * 
 *             with nogil:
 *                 check_status(self.reader.get()             # <<<<<<<<<<<<<<
 *                              .ReadRowGroups(c_row_groups, c_column_indices,
 *                                             &ctable))
 */
          __pyx_t_8 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->reader.get()->ReadRowGroups(__pyx_v_c_row_groups, __pyx_v_c_column_indices, (&__pyx_v_ctable))); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1108, __pyx_L10_error)
        }

        /* "pyarrow/_parquet.pyx":1107
 *                 c_column_indices.push_back(index)
 * 
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadRowGroups(c_row_groups, c_column_indices,
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L11;
          }
          __pyx_L10_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L1_error;
          }
          __pyx_L11:;
        }
    }

    /* "pyarrow/_parquet.pyx":1103
 *             c_row_groups.push_back(row_group)
 * 
 *         if column_indices is not None:             # <<<<<<<<<<<<<<
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)
 */
    goto __pyx_L6;
  }

  /* "pyarrow/_parquet.pyx":1113
 *         else:
 *             # Read all columns
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadRowGroups(c_row_groups, &ctable))
 */
  /*else*/ {
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_parquet.pyx":1114
 *             # Read all columns
 *             with nogil:
 *                 check_status(self.reader.get()             # <<<<<<<<<<<<<<
 *                              .ReadRowGroups(c_row_groups, &ctable))
 *         return pyarrow_wrap_table(ctable)
 */
          __pyx_t_8 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->reader.get()->ReadRowGroups(__pyx_v_c_row_groups, (&__pyx_v_ctable))); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1114, __pyx_L13_error)
        }

        /* "pyarrow/_parquet.pyx":1113
 *         else:
 *             # Read all columns
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadRowGroups(c_row_groups, &ctable))
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L14;
          }
          __pyx_L13_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L1_error;
          }
          __pyx_L14:;
        }
    }
  }
  __pyx_L6:;

  /* "pyarrow/_parquet.pyx":1116
 *                 check_status(self.reader.get()
 *                              .ReadRowGroups(c_row_groups, &ctable))
 *         return pyarrow_wrap_table(ctable)             # <<<<<<<<<<<<<<
 * 
 *     def read_all(self, column_indices=None, bint use_threads=True):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_table(__pyx_v_ctable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1090
 *         return self.read_row_groups([i], column_indices, use_threads)
 * 
 *     def read_row_groups(self, row_groups not None, column_indices=None,             # <<<<<<<<<<<<<<
 *                         bint use_threads=True):
 *         cdef:
 */

  /* 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("pyarrow._parquet.ParquetReader.read_row_groups", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_row_group);
  __Pyx_XDECREF(__pyx_v_index);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1118
 *         return pyarrow_wrap_table(ctable)
 * 
 *     def read_all(self, column_indices=None, bint use_threads=True):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CTable] ctable
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_11read_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_10read_all[] = "ParquetReader.read_all(self, column_indices=None, bool use_threads=True)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_11read_all(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_column_indices = 0;
  int __pyx_v_use_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("read_all (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_column_indices,&__pyx_n_s_use_threads,0};
    PyObject* values[2] = {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  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_column_indices);
          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_use_threads);
          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(0, 1118, __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_column_indices = values[0];
    if (values[1]) {
      __pyx_v_use_threads = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_use_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1118, __pyx_L3_error)
    } else {
      __pyx_v_use_threads = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("read_all", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1118, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_10read_all(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), __pyx_v_column_indices, __pyx_v_use_threads);

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_10read_all(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_column_indices, int __pyx_v_use_threads) {
  std::shared_ptr< arrow::Table>  __pyx_v_ctable;
  std::vector<int>  __pyx_v_c_column_indices;
  PyObject *__pyx_v_index = NULL;
  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;
  Py_ssize_t __pyx_t_7;
  PyObject *(*__pyx_t_8)(PyObject *);
  int __pyx_t_9;
  __Pyx_RefNannySetupContext("read_all", 0);

  /* "pyarrow/_parquet.pyx":1123
 *             vector[int] c_column_indices
 * 
 *         if use_threads:             # <<<<<<<<<<<<<<
 *             self.set_use_threads(use_threads)
 * 
 */
  __pyx_t_1 = (__pyx_v_use_threads != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1124
 * 
 *         if use_threads:
 *             self.set_use_threads(use_threads)             # <<<<<<<<<<<<<<
 * 
 *         if column_indices is not None:
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_use_threads); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_use_threads); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    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_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1123
 *             vector[int] c_column_indices
 * 
 *         if use_threads:             # <<<<<<<<<<<<<<
 *             self.set_use_threads(use_threads)
 * 
 */
  }

  /* "pyarrow/_parquet.pyx":1126
 *             self.set_use_threads(use_threads)
 * 
 *         if column_indices is not None:             # <<<<<<<<<<<<<<
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)
 */
  __pyx_t_1 = (__pyx_v_column_indices != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "pyarrow/_parquet.pyx":1127
 * 
 *         if column_indices is not None:
 *             for index in column_indices:             # <<<<<<<<<<<<<<
 *                 c_column_indices.push_back(index)
 * 
 */
    if (likely(PyList_CheckExact(__pyx_v_column_indices)) || PyTuple_CheckExact(__pyx_v_column_indices)) {
      __pyx_t_2 = __pyx_v_column_indices; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_column_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1127, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1127, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_8(__pyx_t_2);
        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(0, 1127, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "pyarrow/_parquet.pyx":1128
 *         if column_indices is not None:
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)             # <<<<<<<<<<<<<<
 * 
 *             with nogil:
 */
      __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_index); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1128, __pyx_L1_error)
      try {
        __pyx_v_c_column_indices.push_back(__pyx_t_9);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(0, 1128, __pyx_L1_error)
      }

      /* "pyarrow/_parquet.pyx":1127
 * 
 *         if column_indices is not None:
 *             for index in column_indices:             # <<<<<<<<<<<<<<
 *                 c_column_indices.push_back(index)
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1130
 *                 c_column_indices.push_back(index)
 * 
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadTable(c_column_indices, &ctable))
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_parquet.pyx":1131
 * 
 *             with nogil:
 *                 check_status(self.reader.get()             # <<<<<<<<<<<<<<
 *                              .ReadTable(c_column_indices, &ctable))
 *         else:
 */
          __pyx_t_9 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->reader.get()->ReadTable(__pyx_v_c_column_indices, (&__pyx_v_ctable))); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1131, __pyx_L8_error)
        }

        /* "pyarrow/_parquet.pyx":1130
 *                 c_column_indices.push_back(index)
 * 
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadTable(c_column_indices, &ctable))
 */
        /*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:;
        }
    }

    /* "pyarrow/_parquet.pyx":1126
 *             self.set_use_threads(use_threads)
 * 
 *         if column_indices is not None:             # <<<<<<<<<<<<<<
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)
 */
    goto __pyx_L4;
  }

  /* "pyarrow/_parquet.pyx":1135
 *         else:
 *             # Read all columns
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadTable(&ctable))
 */
  /*else*/ {
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_parquet.pyx":1136
 *             # Read all columns
 *             with nogil:
 *                 check_status(self.reader.get()             # <<<<<<<<<<<<<<
 *                              .ReadTable(&ctable))
 *         return pyarrow_wrap_table(ctable)
 */
          __pyx_t_9 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->reader.get()->ReadTable((&__pyx_v_ctable))); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1136, __pyx_L11_error)
        }

        /* "pyarrow/_parquet.pyx":1135
 *         else:
 *             # Read all columns
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(self.reader.get()
 *                              .ReadTable(&ctable))
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L12;
          }
          __pyx_L11_error: {
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L1_error;
          }
          __pyx_L12:;
        }
    }
  }
  __pyx_L4:;

  /* "pyarrow/_parquet.pyx":1138
 *                 check_status(self.reader.get()
 *                              .ReadTable(&ctable))
 *         return pyarrow_wrap_table(ctable)             # <<<<<<<<<<<<<<
 * 
 *     def scan_contents(self, column_indices=None, batch_size=65536):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_table(__pyx_v_ctable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1118
 *         return pyarrow_wrap_table(ctable)
 * 
 *     def read_all(self, column_indices=None, bint use_threads=True):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CTable] ctable
 */

  /* 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("pyarrow._parquet.ParquetReader.read_all", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_index);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1140
 *         return pyarrow_wrap_table(ctable)
 * 
 *     def scan_contents(self, column_indices=None, batch_size=65536):             # <<<<<<<<<<<<<<
 *         cdef:
 *             vector[int] c_column_indices
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_13scan_contents(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_12scan_contents[] = "ParquetReader.scan_contents(self, column_indices=None, batch_size=65536)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_13scan_contents(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_column_indices = 0;
  PyObject *__pyx_v_batch_size = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scan_contents (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_column_indices,&__pyx_n_s_batch_size,0};
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)__pyx_int_65536);
    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_column_indices);
          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_batch_size);
          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_contents") < 0)) __PYX_ERR(0, 1140, __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_column_indices = values[0];
    __pyx_v_batch_size = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("scan_contents", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1140, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.scan_contents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_12scan_contents(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), __pyx_v_column_indices, __pyx_v_batch_size);

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_12scan_contents(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_column_indices, PyObject *__pyx_v_batch_size) {
  std::vector<int>  __pyx_v_c_column_indices;
  int32_t __pyx_v_c_batch_size;
  int64_t __pyx_v_c_num_rows;
  PyObject *__pyx_v_index = NULL;
  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)(PyObject *);
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int32_t __pyx_t_8;
  __Pyx_RefNannySetupContext("scan_contents", 0);

  /* "pyarrow/_parquet.pyx":1146
 *             int64_t c_num_rows
 * 
 *         if column_indices is not None:             # <<<<<<<<<<<<<<
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)
 */
  __pyx_t_1 = (__pyx_v_column_indices != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":1147
 * 
 *         if column_indices is not None:
 *             for index in column_indices:             # <<<<<<<<<<<<<<
 *                 c_column_indices.push_back(index)
 * 
 */
    if (likely(PyList_CheckExact(__pyx_v_column_indices)) || PyTuple_CheckExact(__pyx_v_column_indices)) {
      __pyx_t_3 = __pyx_v_column_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_5 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_column_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1147, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1147, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_5)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1147, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1147, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 1147, __pyx_L1_error)
          #else
          __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1147, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          #endif
        }
      } else {
        __pyx_t_6 = __pyx_t_5(__pyx_t_3);
        if (unlikely(!__pyx_t_6)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1147, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_6);
      }
      __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_6);
      __pyx_t_6 = 0;

      /* "pyarrow/_parquet.pyx":1148
 *         if column_indices is not None:
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)             # <<<<<<<<<<<<<<
 * 
 *         c_batch_size = batch_size
 */
      __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_index); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1148, __pyx_L1_error)
      try {
        __pyx_v_c_column_indices.push_back(__pyx_t_7);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(0, 1148, __pyx_L1_error)
      }

      /* "pyarrow/_parquet.pyx":1147
 * 
 *         if column_indices is not None:
 *             for index in column_indices:             # <<<<<<<<<<<<<<
 *                 c_column_indices.push_back(index)
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pyarrow/_parquet.pyx":1146
 *             int64_t c_num_rows
 * 
 *         if column_indices is not None:             # <<<<<<<<<<<<<<
 *             for index in column_indices:
 *                 c_column_indices.push_back(index)
 */
  }

  /* "pyarrow/_parquet.pyx":1150
 *                 c_column_indices.push_back(index)
 * 
 *         c_batch_size = batch_size             # <<<<<<<<<<<<<<
 * 
 *         with nogil:
 */
  __pyx_t_8 = __Pyx_PyInt_As_int32_t(__pyx_v_batch_size); if (unlikely((__pyx_t_8 == ((int32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1150, __pyx_L1_error)
  __pyx_v_c_batch_size = __pyx_t_8;

  /* "pyarrow/_parquet.pyx":1152
 *         c_batch_size = batch_size
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.reader.get()
 *                          .ScanContents(c_column_indices, c_batch_size,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1153
 * 
 *         with nogil:
 *             check_status(self.reader.get()             # <<<<<<<<<<<<<<
 *                          .ScanContents(c_column_indices, c_batch_size,
 *                                        &c_num_rows))
 */
        __pyx_t_7 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->reader.get()->ScanContents(__pyx_v_c_column_indices, __pyx_v_c_batch_size, (&__pyx_v_c_num_rows))); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 1153, __pyx_L7_error)
      }

      /* "pyarrow/_parquet.pyx":1152
 *         c_batch_size = batch_size
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.reader.get()
 *                          .ScanContents(c_column_indices, c_batch_size,
 */
      /*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:;
      }
  }

  /* "pyarrow/_parquet.pyx":1157
 *                                        &c_num_rows))
 * 
 *         return c_num_rows             # <<<<<<<<<<<<<<
 * 
 *     def column_name_idx(self, column_name):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyInt_From_int64_t(__pyx_v_c_num_rows); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1140
 *         return pyarrow_wrap_table(ctable)
 * 
 *     def scan_contents(self, column_indices=None, batch_size=65536):             # <<<<<<<<<<<<<<
 *         cdef:
 *             vector[int] c_column_indices
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.scan_contents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_index);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1159
 *         return c_num_rows
 * 
 *     def column_name_idx(self, column_name):             # <<<<<<<<<<<<<<
 *         """
 *         Find the matching index of a column in the schema.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_15column_name_idx(PyObject *__pyx_v_self, PyObject *__pyx_v_column_name); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_14column_name_idx[] = "ParquetReader.column_name_idx(self, column_name)\n\n        Find the matching index of a column in the schema.\n\n        Parameter\n        ---------\n        column_name: str\n            Name of the column, separation of nesting levels is done via \".\".\n\n        Returns\n        -------\n        column_idx: int\n            Integer index of the position of the column\n        ";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_15column_name_idx(PyObject *__pyx_v_self, PyObject *__pyx_v_column_name) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("column_name_idx (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_14column_name_idx(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), ((PyObject *)__pyx_v_column_name));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_14column_name_idx(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, PyObject *__pyx_v_column_name) {
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_container = 0;
   parquet::FileMetaData const *__pyx_v_metadata;
  int __pyx_v_i;
  PyObject *__pyx_v_col_bytes = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
   parquet::FileMetaData *__pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  __Pyx_RefNannySetupContext("column_name_idx", 0);

  /* "pyarrow/_parquet.pyx":1174
 *         """
 *         cdef:
 *             FileMetaData container = self.metadata             # <<<<<<<<<<<<<<
 *             const CFileMetaData* metadata = container._metadata
 *             int i = 0
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_metadata); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_7pyarrow_8_parquet_FileMetaData))))) __PYX_ERR(0, 1174, __pyx_L1_error)
  __pyx_v_container = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":1175
 *         cdef:
 *             FileMetaData container = self.metadata
 *             const CFileMetaData* metadata = container._metadata             # <<<<<<<<<<<<<<
 *             int i = 0
 * 
 */
  __pyx_t_2 = __pyx_v_container->_metadata;
  __pyx_v_metadata = __pyx_t_2;

  /* "pyarrow/_parquet.pyx":1176
 *             FileMetaData container = self.metadata
 *             const CFileMetaData* metadata = container._metadata
 *             int i = 0             # <<<<<<<<<<<<<<
 * 
 *         if self._column_idx_map is None:
 */
  __pyx_v_i = 0;

  /* "pyarrow/_parquet.pyx":1178
 *             int i = 0
 * 
 *         if self._column_idx_map is None:             # <<<<<<<<<<<<<<
 *             self._column_idx_map = {}
 *             for i in range(0, metadata.num_columns()):
 */
  __pyx_t_3 = (__pyx_v_self->_column_idx_map == Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":1179
 * 
 *         if self._column_idx_map is None:
 *             self._column_idx_map = {}             # <<<<<<<<<<<<<<
 *             for i in range(0, metadata.num_columns()):
 *                 col_bytes = tobytes(metadata.schema().Column(i)
 */
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_v_self->_column_idx_map);
    __Pyx_DECREF(__pyx_v_self->_column_idx_map);
    __pyx_v_self->_column_idx_map = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":1180
 *         if self._column_idx_map is None:
 *             self._column_idx_map = {}
 *             for i in range(0, metadata.num_columns()):             # <<<<<<<<<<<<<<
 *                 col_bytes = tobytes(metadata.schema().Column(i)
 *                                     .path().get().ToDotString())
 */
    __pyx_t_5 = __pyx_v_metadata->num_columns();
    __pyx_t_6 = __pyx_t_5;
    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
      __pyx_v_i = __pyx_t_7;

      /* "pyarrow/_parquet.pyx":1181
 *             self._column_idx_map = {}
 *             for i in range(0, metadata.num_columns()):
 *                 col_bytes = tobytes(metadata.schema().Column(i)             # <<<<<<<<<<<<<<
 *                                     .path().get().ToDotString())
 *                 self._column_idx_map[col_bytes] = i
 */
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1181, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);

      /* "pyarrow/_parquet.pyx":1182
 *             for i in range(0, metadata.num_columns()):
 *                 col_bytes = tobytes(metadata.schema().Column(i)
 *                                     .path().get().ToDotString())             # <<<<<<<<<<<<<<
 *                 self._column_idx_map[col_bytes] = i
 * 
 */
      __pyx_t_9 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_metadata->schema()->Column(__pyx_v_i)->path().get()->ToDotString()); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_10, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1181, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_v_col_bytes, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "pyarrow/_parquet.pyx":1183
 *                 col_bytes = tobytes(metadata.schema().Column(i)
 *                                     .path().get().ToDotString())
 *                 self._column_idx_map[col_bytes] = i             # <<<<<<<<<<<<<<
 * 
 *         return self._column_idx_map[tobytes(column_name)]
 */
      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(PyObject_SetItem(__pyx_v_self->_column_idx_map, __pyx_v_col_bytes, __pyx_t_1) < 0)) __PYX_ERR(0, 1183, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "pyarrow/_parquet.pyx":1178
 *             int i = 0
 * 
 *         if self._column_idx_map is None:             # <<<<<<<<<<<<<<
 *             self._column_idx_map = {}
 *             for i in range(0, metadata.num_columns()):
 */
  }

  /* "pyarrow/_parquet.pyx":1185
 *                 self._column_idx_map[col_bytes] = i
 * 
 *         return self._column_idx_map[tobytes(column_name)]             # <<<<<<<<<<<<<<
 * 
 *     def read_column(self, int column_index):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = NULL;
  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_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_v_column_name) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_column_name);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_self->_column_idx_map, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1159
 *         return c_num_rows
 * 
 *     def column_name_idx(self, column_name):             # <<<<<<<<<<<<<<
 *         """
 *         Find the matching index of a column in the schema.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.column_name_idx", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_container);
  __Pyx_XDECREF(__pyx_v_col_bytes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1187
 *         return self._column_idx_map[tobytes(column_name)]
 * 
 *     def read_column(self, int column_index):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_17read_column(PyObject *__pyx_v_self, PyObject *__pyx_arg_column_index); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_16read_column[] = "ParquetReader.read_column(self, int column_index)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_17read_column(PyObject *__pyx_v_self, PyObject *__pyx_arg_column_index) {
  int __pyx_v_column_index;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("read_column (wrapper)", 0);
  assert(__pyx_arg_column_index); {
    __pyx_v_column_index = __Pyx_PyInt_As_int(__pyx_arg_column_index); if (unlikely((__pyx_v_column_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1187, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_16read_column(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), ((int)__pyx_v_column_index));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_16read_column(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_column_index) {
  std::shared_ptr< arrow::ChunkedArray>  __pyx_v_out;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("read_column", 0);

  /* "pyarrow/_parquet.pyx":1189
 *     def read_column(self, int column_index):
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.reader.get()
 *                          .ReadColumn(column_index, &out))
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1190
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:
 *             check_status(self.reader.get()             # <<<<<<<<<<<<<<
 *                          .ReadColumn(column_index, &out))
 *         return pyarrow_wrap_chunked_array(out)
 */
        __pyx_t_1 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->reader.get()->ReadColumn(__pyx_v_column_index, (&__pyx_v_out))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1190, __pyx_L4_error)
      }

      /* "pyarrow/_parquet.pyx":1189
 *     def read_column(self, int column_index):
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.reader.get()
 *                          .ReadColumn(column_index, &out))
 */
      /*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:;
      }
  }

  /* "pyarrow/_parquet.pyx":1192
 *             check_status(self.reader.get()
 *                          .ReadColumn(column_index, &out))
 *         return pyarrow_wrap_chunked_array(out)             # <<<<<<<<<<<<<<
 * 
 *     def read_schema_field(self, int field_index):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_chunked_array(__pyx_v_out); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1187
 *         return self._column_idx_map[tobytes(column_name)]
 * 
 *     def read_column(self, int column_index):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_column", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1194
 *         return pyarrow_wrap_chunked_array(out)
 * 
 *     def read_schema_field(self, int field_index):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_19read_schema_field(PyObject *__pyx_v_self, PyObject *__pyx_arg_field_index); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_18read_schema_field[] = "ParquetReader.read_schema_field(self, int field_index)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_19read_schema_field(PyObject *__pyx_v_self, PyObject *__pyx_arg_field_index) {
  int __pyx_v_field_index;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("read_schema_field (wrapper)", 0);
  assert(__pyx_arg_field_index); {
    __pyx_v_field_index = __Pyx_PyInt_As_int(__pyx_arg_field_index); if (unlikely((__pyx_v_field_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1194, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_schema_field", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_18read_schema_field(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), ((int)__pyx_v_field_index));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_18read_schema_field(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, int __pyx_v_field_index) {
  std::shared_ptr< arrow::ChunkedArray>  __pyx_v_out;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("read_schema_field", 0);

  /* "pyarrow/_parquet.pyx":1196
 *     def read_schema_field(self, int field_index):
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.reader.get()
 *                          .ReadSchemaField(field_index, &out))
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1197
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:
 *             check_status(self.reader.get()             # <<<<<<<<<<<<<<
 *                          .ReadSchemaField(field_index, &out))
 *         return pyarrow_wrap_chunked_array(out)
 */
        __pyx_t_1 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->reader.get()->ReadSchemaField(__pyx_v_field_index, (&__pyx_v_out))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1197, __pyx_L4_error)
      }

      /* "pyarrow/_parquet.pyx":1196
 *     def read_schema_field(self, int field_index):
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.reader.get()
 *                          .ReadSchemaField(field_index, &out))
 */
      /*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:;
      }
  }

  /* "pyarrow/_parquet.pyx":1199
 *             check_status(self.reader.get()
 *                          .ReadSchemaField(field_index, &out))
 *         return pyarrow_wrap_chunked_array(out)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_chunked_array(__pyx_v_out); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_parquet.pyx":1194
 *         return pyarrow_wrap_chunked_array(out)
 * 
 *     def read_schema_field(self, int field_index):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CChunkedArray] out
 *         with nogil:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.read_schema_field", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1003
 * 
 *     cdef public:
 *         _column_idx_map             # <<<<<<<<<<<<<<
 * 
 *     def __cinit__(self, MemoryPool memory_pool=None):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_column_idx_map);
  __pyx_r = __pyx_v_self->_column_idx_map;
  goto __pyx_L0;

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

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_2__set__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_2__set__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__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->_column_idx_map);
  __Pyx_DECREF(__pyx_v_self->_column_idx_map);
  __pyx_v_self->_column_idx_map = __pyx_v_value;

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

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_4__del__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self));

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

static int __pyx_pf_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_4__del__(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__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->_column_idx_map);
  __Pyx_DECREF(__pyx_v_self->_column_idx_map);
  __pyx_v_self->_column_idx_map = Py_None;

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_21__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_20__reduce_cython__[] = "ParquetReader.__reduce_cython__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_21__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_20__reduce_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __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(1, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_23__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetReader_22__setstate_cython__[] = "ParquetReader.__setstate_cython__(self, __pyx_state)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetReader_23__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetReader_22__setstate_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetReader_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __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(1, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetReader.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1220
 *         int64_t data_page_size
 * 
 *     def __cinit__(self, where, Schema schema, use_dictionary=None,             # <<<<<<<<<<<<<<
 *                   compression=None, version=None,
 *                   write_statistics=None,
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_where = 0;
  struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema = 0;
  PyObject *__pyx_v_use_dictionary = 0;
  PyObject *__pyx_v_compression = 0;
  PyObject *__pyx_v_version = 0;
  PyObject *__pyx_v_write_statistics = 0;
  struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool = 0;
  PyObject *__pyx_v_use_deprecated_int96_timestamps = 0;
  PyObject *__pyx_v_coerce_timestamps = 0;
  PyObject *__pyx_v_data_page_size = 0;
  PyObject *__pyx_v_allow_truncated_timestamps = 0;
  PyObject *__pyx_v_compression_level = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_where,&__pyx_n_s_schema,&__pyx_n_s_use_dictionary,&__pyx_n_s_compression,&__pyx_n_s_version,&__pyx_n_s_write_statistics,&__pyx_n_s_memory_pool,&__pyx_n_s_use_deprecated_int96_timestamps,&__pyx_n_s_coerce_timestamps,&__pyx_n_s_data_page_size,&__pyx_n_s_allow_truncated_timestamps,&__pyx_n_s_compression_level,0};
    PyObject* values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
    values[2] = ((PyObject *)Py_None);

    /* "pyarrow/_parquet.pyx":1221
 * 
 *     def __cinit__(self, where, Schema schema, use_dictionary=None,
 *                   compression=None, version=None,             # <<<<<<<<<<<<<<
 *                   write_statistics=None,
 *                   MemoryPool memory_pool=None,
 */
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);

    /* "pyarrow/_parquet.pyx":1222
 *     def __cinit__(self, where, Schema schema, use_dictionary=None,
 *                   compression=None, version=None,
 *                   write_statistics=None,             # <<<<<<<<<<<<<<
 *                   MemoryPool memory_pool=None,
 *                   use_deprecated_int96_timestamps=False,
 */
    values[5] = ((PyObject *)Py_None);

    /* "pyarrow/_parquet.pyx":1223
 *                   compression=None, version=None,
 *                   write_statistics=None,
 *                   MemoryPool memory_pool=None,             # <<<<<<<<<<<<<<
 *                   use_deprecated_int96_timestamps=False,
 *                   coerce_timestamps=None,
 */
    values[6] = (PyObject *)((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)Py_None);

    /* "pyarrow/_parquet.pyx":1224
 *                   write_statistics=None,
 *                   MemoryPool memory_pool=None,
 *                   use_deprecated_int96_timestamps=False,             # <<<<<<<<<<<<<<
 *                   coerce_timestamps=None,
 *                   data_page_size=None,
 */
    values[7] = ((PyObject *)Py_False);

    /* "pyarrow/_parquet.pyx":1225
 *                   MemoryPool memory_pool=None,
 *                   use_deprecated_int96_timestamps=False,
 *                   coerce_timestamps=None,             # <<<<<<<<<<<<<<
 *                   data_page_size=None,
 *                   allow_truncated_timestamps=False,
 */
    values[8] = ((PyObject *)Py_None);

    /* "pyarrow/_parquet.pyx":1226
 *                   use_deprecated_int96_timestamps=False,
 *                   coerce_timestamps=None,
 *                   data_page_size=None,             # <<<<<<<<<<<<<<
 *                   allow_truncated_timestamps=False,
 *                   compression_level=None):
 */
    values[9] = ((PyObject *)Py_None);

    /* "pyarrow/_parquet.pyx":1227
 *                   coerce_timestamps=None,
 *                   data_page_size=None,
 *                   allow_truncated_timestamps=False,             # <<<<<<<<<<<<<<
 *                   compression_level=None):
 *         cdef:
 */
    values[10] = ((PyObject *)Py_False);

    /* "pyarrow/_parquet.pyx":1228
 *                   data_page_size=None,
 *                   allow_truncated_timestamps=False,
 *                   compression_level=None):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[WriterProperties] properties
 */
    values[11] = ((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 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        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_where)) != 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_schema)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 12, 1); __PYX_ERR(0, 1220, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_use_dictionary);
          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_compression);
          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_version);
          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_write_statistics);
          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_memory_pool);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_use_deprecated_int96_timestamps);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_coerce_timestamps);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data_page_size);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allow_truncated_timestamps);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compression_level);
          if (value) { values[11] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 1220, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        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_where = values[0];
    __pyx_v_schema = ((struct __pyx_obj_7pyarrow_3lib_Schema *)values[1]);
    __pyx_v_use_dictionary = values[2];
    __pyx_v_compression = values[3];
    __pyx_v_version = values[4];
    __pyx_v_write_statistics = values[5];
    __pyx_v_memory_pool = ((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)values[6]);
    __pyx_v_use_deprecated_int96_timestamps = values[7];
    __pyx_v_coerce_timestamps = values[8];
    __pyx_v_data_page_size = values[9];
    __pyx_v_allow_truncated_timestamps = values[10];
    __pyx_v_compression_level = values[11];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 12, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1220, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_7pyarrow_3lib_Schema, 1, "schema", 0))) __PYX_ERR(0, 1220, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_memory_pool), __pyx_ptype_7pyarrow_3lib_MemoryPool, 1, "memory_pool", 0))) __PYX_ERR(0, 1223, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter___cinit__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self), __pyx_v_where, __pyx_v_schema, __pyx_v_use_dictionary, __pyx_v_compression, __pyx_v_version, __pyx_v_write_statistics, __pyx_v_memory_pool, __pyx_v_use_deprecated_int96_timestamps, __pyx_v_coerce_timestamps, __pyx_v_data_page_size, __pyx_v_allow_truncated_timestamps, __pyx_v_compression_level);

  /* "pyarrow/_parquet.pyx":1220
 *         int64_t data_page_size
 * 
 *     def __cinit__(self, where, Schema schema, use_dictionary=None,             # <<<<<<<<<<<<<<
 *                   compression=None, version=None,
 *                   write_statistics=None,
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7pyarrow_8_parquet_13ParquetWriter___cinit__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, PyObject *__pyx_v_where, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema, PyObject *__pyx_v_use_dictionary, PyObject *__pyx_v_compression, PyObject *__pyx_v_version, PyObject *__pyx_v_write_statistics, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool, PyObject *__pyx_v_use_deprecated_int96_timestamps, PyObject *__pyx_v_coerce_timestamps, PyObject *__pyx_v_data_page_size, PyObject *__pyx_v_allow_truncated_timestamps, PyObject *__pyx_v_compression_level) {
  std::shared_ptr<parquet::WriterProperties>  __pyx_v_properties;
  std::string __pyx_v_c_where;
   arrow::MemoryPool *__pyx_v_pool;
  parquet::WriterProperties::Builder __pyx_v_properties_builder;
  parquet::ArrowWriterProperties::Builder __pyx_v_arrow_properties_builder;
  std::shared_ptr<parquet::ArrowWriterProperties>  __pyx_v_arrow_properties;
  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;
  std::string __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  int __pyx_t_11;
  int64_t __pyx_t_12;
  __Pyx_RefNannySetupContext("__cinit__", 0);
  __Pyx_INCREF(__pyx_v_where);

  /* "pyarrow/_parquet.pyx":1234
 *             CMemoryPool* pool
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             where = _stringify_path(where)
 *         except TypeError:
 */
  {
    __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:*/ {

      /* "pyarrow/_parquet.pyx":1235
 * 
 *         try:
 *             where = _stringify_path(where)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             get_writer(where, &self.sink)
 */
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_stringify_path); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1235, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_where) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_where);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1235, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_where, __pyx_t_4);
      __pyx_t_4 = 0;

      /* "pyarrow/_parquet.pyx":1234
 *             CMemoryPool* pool
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             where = _stringify_path(where)
 *         except TypeError:
 */
    }

    /* "pyarrow/_parquet.pyx":1240
 *             self.own_sink = False
 *         else:
 *             c_where = tobytes(where)             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 check_status(FileOutputStream.Open(c_where,
 */
    /*else:*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1240, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_v_where) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_where);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = __pyx_convert_string_from_py_std__in_string(__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1240, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_c_where = __pyx_t_7;

      /* "pyarrow/_parquet.pyx":1241
 *         else:
 *             c_where = tobytes(where)
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(FileOutputStream.Open(c_where,
 *                                                    &self.sink))
 */
      {
          #ifdef WITH_THREAD
          PyThreadState *_save;
          Py_UNBLOCK_THREADS
          __Pyx_FastGIL_Remember();
          #endif
          /*try:*/ {

            /* "pyarrow/_parquet.pyx":1242
 *             c_where = tobytes(where)
 *             with nogil:
 *                 check_status(FileOutputStream.Open(c_where,             # <<<<<<<<<<<<<<
 *                                                    &self.sink))
 *             self.own_sink = True
 */
            __pyx_t_8 = __pyx_f_7pyarrow_3lib_check_status(arrow::io::FileOutputStream::Open(__pyx_v_c_where, (&__pyx_v_self->sink))); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1242, __pyx_L10_error)
          }

          /* "pyarrow/_parquet.pyx":1241
 *         else:
 *             c_where = tobytes(where)
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 check_status(FileOutputStream.Open(c_where,
 *                                                    &self.sink))
 */
          /*finally:*/ {
            /*normal exit:*/{
              #ifdef WITH_THREAD
              __Pyx_FastGIL_Forget();
              Py_BLOCK_THREADS
              #endif
              goto __pyx_L11;
            }
            __pyx_L10_error: {
              #ifdef WITH_THREAD
              __Pyx_FastGIL_Forget();
              Py_BLOCK_THREADS
              #endif
              goto __pyx_L5_except_error;
            }
            __pyx_L11:;
          }
      }

      /* "pyarrow/_parquet.pyx":1244
 *                 check_status(FileOutputStream.Open(c_where,
 *                                                    &self.sink))
 *             self.own_sink = True             # <<<<<<<<<<<<<<
 * 
 *         self.use_dictionary = use_dictionary
 */
      __pyx_v_self->own_sink = 1;
    }
    __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;

    /* "pyarrow/_parquet.pyx":1236
 *         try:
 *             where = _stringify_path(where)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             get_writer(where, &self.sink)
 *             self.own_sink = False
 */
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_8) {
      __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 1236, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_6);

      /* "pyarrow/_parquet.pyx":1237
 *             where = _stringify_path(where)
 *         except TypeError:
 *             get_writer(where, &self.sink)             # <<<<<<<<<<<<<<
 *             self.own_sink = False
 *         else:
 */
      __pyx_t_9 = __pyx_f_7pyarrow_3lib_get_writer(__pyx_v_where, (&__pyx_v_self->sink)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1237, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "pyarrow/_parquet.pyx":1238
 *         except TypeError:
 *             get_writer(where, &self.sink)
 *             self.own_sink = False             # <<<<<<<<<<<<<<
 *         else:
 *             c_where = tobytes(where)
 */
      __pyx_v_self->own_sink = 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_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pyarrow/_parquet.pyx":1234
 *             CMemoryPool* pool
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             where = _stringify_path(where)
 *         except TypeError:
 */
    __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:;
  }

  /* "pyarrow/_parquet.pyx":1246
 *             self.own_sink = True
 * 
 *         self.use_dictionary = use_dictionary             # <<<<<<<<<<<<<<
 *         self.compression = compression
 *         self.compression_level = compression_level
 */
  __Pyx_INCREF(__pyx_v_use_dictionary);
  __Pyx_GIVEREF(__pyx_v_use_dictionary);
  __Pyx_GOTREF(__pyx_v_self->use_dictionary);
  __Pyx_DECREF(__pyx_v_self->use_dictionary);
  __pyx_v_self->use_dictionary = __pyx_v_use_dictionary;

  /* "pyarrow/_parquet.pyx":1247
 * 
 *         self.use_dictionary = use_dictionary
 *         self.compression = compression             # <<<<<<<<<<<<<<
 *         self.compression_level = compression_level
 *         self.version = version
 */
  __Pyx_INCREF(__pyx_v_compression);
  __Pyx_GIVEREF(__pyx_v_compression);
  __Pyx_GOTREF(__pyx_v_self->compression);
  __Pyx_DECREF(__pyx_v_self->compression);
  __pyx_v_self->compression = __pyx_v_compression;

  /* "pyarrow/_parquet.pyx":1248
 *         self.use_dictionary = use_dictionary
 *         self.compression = compression
 *         self.compression_level = compression_level             # <<<<<<<<<<<<<<
 *         self.version = version
 *         self.write_statistics = write_statistics
 */
  __Pyx_INCREF(__pyx_v_compression_level);
  __Pyx_GIVEREF(__pyx_v_compression_level);
  __Pyx_GOTREF(__pyx_v_self->compression_level);
  __Pyx_DECREF(__pyx_v_self->compression_level);
  __pyx_v_self->compression_level = __pyx_v_compression_level;

  /* "pyarrow/_parquet.pyx":1249
 *         self.compression = compression
 *         self.compression_level = compression_level
 *         self.version = version             # <<<<<<<<<<<<<<
 *         self.write_statistics = write_statistics
 *         self.use_deprecated_int96_timestamps = use_deprecated_int96_timestamps
 */
  __Pyx_INCREF(__pyx_v_version);
  __Pyx_GIVEREF(__pyx_v_version);
  __Pyx_GOTREF(__pyx_v_self->version);
  __Pyx_DECREF(__pyx_v_self->version);
  __pyx_v_self->version = __pyx_v_version;

  /* "pyarrow/_parquet.pyx":1250
 *         self.compression_level = compression_level
 *         self.version = version
 *         self.write_statistics = write_statistics             # <<<<<<<<<<<<<<
 *         self.use_deprecated_int96_timestamps = use_deprecated_int96_timestamps
 *         self.coerce_timestamps = coerce_timestamps
 */
  __Pyx_INCREF(__pyx_v_write_statistics);
  __Pyx_GIVEREF(__pyx_v_write_statistics);
  __Pyx_GOTREF(__pyx_v_self->write_statistics);
  __Pyx_DECREF(__pyx_v_self->write_statistics);
  __pyx_v_self->write_statistics = __pyx_v_write_statistics;

  /* "pyarrow/_parquet.pyx":1251
 *         self.version = version
 *         self.write_statistics = write_statistics
 *         self.use_deprecated_int96_timestamps = use_deprecated_int96_timestamps             # <<<<<<<<<<<<<<
 *         self.coerce_timestamps = coerce_timestamps
 *         self.allow_truncated_timestamps = allow_truncated_timestamps
 */
  __Pyx_INCREF(__pyx_v_use_deprecated_int96_timestamps);
  __Pyx_GIVEREF(__pyx_v_use_deprecated_int96_timestamps);
  __Pyx_GOTREF(__pyx_v_self->use_deprecated_int96_timestamps);
  __Pyx_DECREF(__pyx_v_self->use_deprecated_int96_timestamps);
  __pyx_v_self->use_deprecated_int96_timestamps = __pyx_v_use_deprecated_int96_timestamps;

  /* "pyarrow/_parquet.pyx":1252
 *         self.write_statistics = write_statistics
 *         self.use_deprecated_int96_timestamps = use_deprecated_int96_timestamps
 *         self.coerce_timestamps = coerce_timestamps             # <<<<<<<<<<<<<<
 *         self.allow_truncated_timestamps = allow_truncated_timestamps
 * 
 */
  __Pyx_INCREF(__pyx_v_coerce_timestamps);
  __Pyx_GIVEREF(__pyx_v_coerce_timestamps);
  __Pyx_GOTREF(__pyx_v_self->coerce_timestamps);
  __Pyx_DECREF(__pyx_v_self->coerce_timestamps);
  __pyx_v_self->coerce_timestamps = __pyx_v_coerce_timestamps;

  /* "pyarrow/_parquet.pyx":1253
 *         self.use_deprecated_int96_timestamps = use_deprecated_int96_timestamps
 *         self.coerce_timestamps = coerce_timestamps
 *         self.allow_truncated_timestamps = allow_truncated_timestamps             # <<<<<<<<<<<<<<
 * 
 *         cdef WriterProperties.Builder properties_builder
 */
  __Pyx_INCREF(__pyx_v_allow_truncated_timestamps);
  __Pyx_GIVEREF(__pyx_v_allow_truncated_timestamps);
  __Pyx_GOTREF(__pyx_v_self->allow_truncated_timestamps);
  __Pyx_DECREF(__pyx_v_self->allow_truncated_timestamps);
  __pyx_v_self->allow_truncated_timestamps = __pyx_v_allow_truncated_timestamps;

  /* "pyarrow/_parquet.pyx":1256
 * 
 *         cdef WriterProperties.Builder properties_builder
 *         self._set_version(&properties_builder)             # <<<<<<<<<<<<<<
 *         self._set_compression_props(&properties_builder)
 *         self._set_dictionary_props(&properties_builder)
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self->__pyx_vtab)->_set_version(__pyx_v_self, (&__pyx_v_properties_builder));

  /* "pyarrow/_parquet.pyx":1257
 *         cdef WriterProperties.Builder properties_builder
 *         self._set_version(&properties_builder)
 *         self._set_compression_props(&properties_builder)             # <<<<<<<<<<<<<<
 *         self._set_dictionary_props(&properties_builder)
 *         self._set_statistics_props(&properties_builder)
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self->__pyx_vtab)->_set_compression_props(__pyx_v_self, (&__pyx_v_properties_builder));

  /* "pyarrow/_parquet.pyx":1258
 *         self._set_version(&properties_builder)
 *         self._set_compression_props(&properties_builder)
 *         self._set_dictionary_props(&properties_builder)             # <<<<<<<<<<<<<<
 *         self._set_statistics_props(&properties_builder)
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self->__pyx_vtab)->_set_dictionary_props(__pyx_v_self, (&__pyx_v_properties_builder));

  /* "pyarrow/_parquet.pyx":1259
 *         self._set_compression_props(&properties_builder)
 *         self._set_dictionary_props(&properties_builder)
 *         self._set_statistics_props(&properties_builder)             # <<<<<<<<<<<<<<
 * 
 *         if data_page_size is not None:
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self->__pyx_vtab)->_set_statistics_props(__pyx_v_self, (&__pyx_v_properties_builder));

  /* "pyarrow/_parquet.pyx":1261
 *         self._set_statistics_props(&properties_builder)
 * 
 *         if data_page_size is not None:             # <<<<<<<<<<<<<<
 *             properties_builder.data_pagesize(data_page_size)
 * 
 */
  __pyx_t_10 = (__pyx_v_data_page_size != Py_None);
  __pyx_t_11 = (__pyx_t_10 != 0);
  if (__pyx_t_11) {

    /* "pyarrow/_parquet.pyx":1262
 * 
 *         if data_page_size is not None:
 *             properties_builder.data_pagesize(data_page_size)             # <<<<<<<<<<<<<<
 * 
 *         properties = properties_builder.build()
 */
    __pyx_t_12 = __Pyx_PyInt_As_int64_t(__pyx_v_data_page_size); if (unlikely((__pyx_t_12 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1262, __pyx_L1_error)
    (void)(__pyx_v_properties_builder.data_pagesize(__pyx_t_12));

    /* "pyarrow/_parquet.pyx":1261
 *         self._set_statistics_props(&properties_builder)
 * 
 *         if data_page_size is not None:             # <<<<<<<<<<<<<<
 *             properties_builder.data_pagesize(data_page_size)
 * 
 */
  }

  /* "pyarrow/_parquet.pyx":1264
 *             properties_builder.data_pagesize(data_page_size)
 * 
 *         properties = properties_builder.build()             # <<<<<<<<<<<<<<
 * 
 *         cdef ArrowWriterProperties.Builder arrow_properties_builder
 */
  __pyx_v_properties = __pyx_v_properties_builder.build();

  /* "pyarrow/_parquet.pyx":1270
 *         # Store the original Arrow schema so things like dictionary types can
 *         # be automatically reconstructed
 *         arrow_properties_builder.store_schema()             # <<<<<<<<<<<<<<
 * 
 *         self._set_int96_support(&arrow_properties_builder)
 */
  (void)(__pyx_v_arrow_properties_builder.store_schema());

  /* "pyarrow/_parquet.pyx":1272
 *         arrow_properties_builder.store_schema()
 * 
 *         self._set_int96_support(&arrow_properties_builder)             # <<<<<<<<<<<<<<
 *         self._set_coerce_timestamps(&arrow_properties_builder)
 *         self._set_allow_truncated_timestamps(&arrow_properties_builder)
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self->__pyx_vtab)->_set_int96_support(__pyx_v_self, (&__pyx_v_arrow_properties_builder));

  /* "pyarrow/_parquet.pyx":1273
 * 
 *         self._set_int96_support(&arrow_properties_builder)
 *         self._set_coerce_timestamps(&arrow_properties_builder)             # <<<<<<<<<<<<<<
 *         self._set_allow_truncated_timestamps(&arrow_properties_builder)
 * 
 */
  __pyx_t_8 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self->__pyx_vtab)->_set_coerce_timestamps(__pyx_v_self, (&__pyx_v_arrow_properties_builder)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1273, __pyx_L1_error)

  /* "pyarrow/_parquet.pyx":1274
 *         self._set_int96_support(&arrow_properties_builder)
 *         self._set_coerce_timestamps(&arrow_properties_builder)
 *         self._set_allow_truncated_timestamps(&arrow_properties_builder)             # <<<<<<<<<<<<<<
 * 
 *         arrow_properties = arrow_properties_builder.build()
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self->__pyx_vtab)->_set_allow_truncated_timestamps(__pyx_v_self, (&__pyx_v_arrow_properties_builder));

  /* "pyarrow/_parquet.pyx":1276
 *         self._set_allow_truncated_timestamps(&arrow_properties_builder)
 * 
 *         arrow_properties = arrow_properties_builder.build()             # <<<<<<<<<<<<<<
 * 
 *         pool = maybe_unbox_memory_pool(memory_pool)
 */
  __pyx_v_arrow_properties = __pyx_v_arrow_properties_builder.build();

  /* "pyarrow/_parquet.pyx":1278
 *         arrow_properties = arrow_properties_builder.build()
 * 
 *         pool = maybe_unbox_memory_pool(memory_pool)             # <<<<<<<<<<<<<<
 *         with nogil:
 *             check_status(
 */
  __pyx_v_pool = __pyx_f_7pyarrow_3lib_maybe_unbox_memory_pool(__pyx_v_memory_pool);

  /* "pyarrow/_parquet.pyx":1279
 * 
 *         pool = maybe_unbox_memory_pool(memory_pool)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(
 *                 FileWriter.Open(deref(schema.schema), pool,
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1280
 *         pool = maybe_unbox_memory_pool(memory_pool)
 *         with nogil:
 *             check_status(             # <<<<<<<<<<<<<<
 *                 FileWriter.Open(deref(schema.schema), pool,
 *                                 self.sink, properties, arrow_properties,
 */
        __pyx_t_8 = __pyx_f_7pyarrow_3lib_check_status(parquet::arrow::FileWriter::Open((*__pyx_v_schema->schema), __pyx_v_pool, __pyx_v_self->sink, __pyx_v_properties, __pyx_v_arrow_properties, (&__pyx_v_self->writer))); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1280, __pyx_L16_error)
      }

      /* "pyarrow/_parquet.pyx":1279
 * 
 *         pool = maybe_unbox_memory_pool(memory_pool)
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(
 *                 FileWriter.Open(deref(schema.schema), pool,
 */
      /*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_L1_error;
        }
        __pyx_L17:;
      }
  }

  /* "pyarrow/_parquet.pyx":1220
 *         int64_t data_page_size
 * 
 *     def __cinit__(self, where, Schema schema, use_dictionary=None,             # <<<<<<<<<<<<<<
 *                   compression=None, version=None,
 *                   write_statistics=None,
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_where);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1285
 *                                 &self.writer))
 * 
 *     cdef void _set_int96_support(self, ArrowWriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if self.use_deprecated_int96_timestamps:
 *             props.enable_deprecated_int96_timestamps()
 */

static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_int96_support(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::ArrowWriterProperties::Builder *__pyx_v_props) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("_set_int96_support", 0);

  /* "pyarrow/_parquet.pyx":1286
 * 
 *     cdef void _set_int96_support(self, ArrowWriterProperties.Builder* props):
 *         if self.use_deprecated_int96_timestamps:             # <<<<<<<<<<<<<<
 *             props.enable_deprecated_int96_timestamps()
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_self->use_deprecated_int96_timestamps); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1286, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1287
 *     cdef void _set_int96_support(self, ArrowWriterProperties.Builder* props):
 *         if self.use_deprecated_int96_timestamps:
 *             props.enable_deprecated_int96_timestamps()             # <<<<<<<<<<<<<<
 *         else:
 *             props.disable_deprecated_int96_timestamps()
 */
    (void)(__pyx_v_props->enable_deprecated_int96_timestamps());

    /* "pyarrow/_parquet.pyx":1286
 * 
 *     cdef void _set_int96_support(self, ArrowWriterProperties.Builder* props):
 *         if self.use_deprecated_int96_timestamps:             # <<<<<<<<<<<<<<
 *             props.enable_deprecated_int96_timestamps()
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1289
 *             props.enable_deprecated_int96_timestamps()
 *         else:
 *             props.disable_deprecated_int96_timestamps()             # <<<<<<<<<<<<<<
 * 
 *     cdef int _set_coerce_timestamps(
 */
  /*else*/ {
    (void)(__pyx_v_props->disable_deprecated_int96_timestamps());
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":1285
 *                                 &self.writer))
 * 
 *     cdef void _set_int96_support(self, ArrowWriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if self.use_deprecated_int96_timestamps:
 *             props.enable_deprecated_int96_timestamps()
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("pyarrow._parquet.ParquetWriter._set_int96_support", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "pyarrow/_parquet.pyx":1291
 *             props.disable_deprecated_int96_timestamps()
 * 
 *     cdef int _set_coerce_timestamps(             # <<<<<<<<<<<<<<
 *             self, ArrowWriterProperties.Builder* props) except -1:
 *         if self.coerce_timestamps == 'ms':
 */

static int __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_coerce_timestamps(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::ArrowWriterProperties::Builder *__pyx_v_props) {
  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("_set_coerce_timestamps", 0);

  /* "pyarrow/_parquet.pyx":1293
 *     cdef int _set_coerce_timestamps(
 *             self, ArrowWriterProperties.Builder* props) except -1:
 *         if self.coerce_timestamps == 'ms':             # <<<<<<<<<<<<<<
 *             props.coerce_timestamps(TimeUnit_MILLI)
 *         elif self.coerce_timestamps == 'us':
 */
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->coerce_timestamps, __pyx_n_u_ms, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1293, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1294
 *             self, ArrowWriterProperties.Builder* props) except -1:
 *         if self.coerce_timestamps == 'ms':
 *             props.coerce_timestamps(TimeUnit_MILLI)             # <<<<<<<<<<<<<<
 *         elif self.coerce_timestamps == 'us':
 *             props.coerce_timestamps(TimeUnit_MICRO)
 */
    (void)(__pyx_v_props->coerce_timestamps( arrow::TimeUnit::MILLI));

    /* "pyarrow/_parquet.pyx":1293
 *     cdef int _set_coerce_timestamps(
 *             self, ArrowWriterProperties.Builder* props) except -1:
 *         if self.coerce_timestamps == 'ms':             # <<<<<<<<<<<<<<
 *             props.coerce_timestamps(TimeUnit_MILLI)
 *         elif self.coerce_timestamps == 'us':
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1295
 *         if self.coerce_timestamps == 'ms':
 *             props.coerce_timestamps(TimeUnit_MILLI)
 *         elif self.coerce_timestamps == 'us':             # <<<<<<<<<<<<<<
 *             props.coerce_timestamps(TimeUnit_MICRO)
 *         elif self.coerce_timestamps is not None:
 */
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->coerce_timestamps, __pyx_n_u_us, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1295, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1296
 *             props.coerce_timestamps(TimeUnit_MILLI)
 *         elif self.coerce_timestamps == 'us':
 *             props.coerce_timestamps(TimeUnit_MICRO)             # <<<<<<<<<<<<<<
 *         elif self.coerce_timestamps is not None:
 *             raise ValueError('Invalid value for coerce_timestamps: {0}'
 */
    (void)(__pyx_v_props->coerce_timestamps( arrow::TimeUnit::MICRO));

    /* "pyarrow/_parquet.pyx":1295
 *         if self.coerce_timestamps == 'ms':
 *             props.coerce_timestamps(TimeUnit_MILLI)
 *         elif self.coerce_timestamps == 'us':             # <<<<<<<<<<<<<<
 *             props.coerce_timestamps(TimeUnit_MICRO)
 *         elif self.coerce_timestamps is not None:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1297
 *         elif self.coerce_timestamps == 'us':
 *             props.coerce_timestamps(TimeUnit_MICRO)
 *         elif self.coerce_timestamps is not None:             # <<<<<<<<<<<<<<
 *             raise ValueError('Invalid value for coerce_timestamps: {0}'
 *                              .format(self.coerce_timestamps))
 */
  __pyx_t_1 = (__pyx_v_self->coerce_timestamps != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (unlikely(__pyx_t_2)) {

    /* "pyarrow/_parquet.pyx":1299
 *         elif self.coerce_timestamps is not None:
 *             raise ValueError('Invalid value for coerce_timestamps: {0}'
 *                              .format(self.coerce_timestamps))             # <<<<<<<<<<<<<<
 * 
 *     cdef void _set_allow_truncated_timestamps(
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Invalid_value_for_coerce_timesta, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1299, __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_self->coerce_timestamps) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_self->coerce_timestamps);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "pyarrow/_parquet.pyx":1298
 *             props.coerce_timestamps(TimeUnit_MICRO)
 *         elif self.coerce_timestamps is not None:
 *             raise ValueError('Invalid value for coerce_timestamps: {0}'             # <<<<<<<<<<<<<<
 *                              .format(self.coerce_timestamps))
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1298, __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(0, 1298, __pyx_L1_error)

    /* "pyarrow/_parquet.pyx":1297
 *         elif self.coerce_timestamps == 'us':
 *             props.coerce_timestamps(TimeUnit_MICRO)
 *         elif self.coerce_timestamps is not None:             # <<<<<<<<<<<<<<
 *             raise ValueError('Invalid value for coerce_timestamps: {0}'
 *                              .format(self.coerce_timestamps))
 */
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":1291
 *             props.disable_deprecated_int96_timestamps()
 * 
 *     cdef int _set_coerce_timestamps(             # <<<<<<<<<<<<<<
 *             self, ArrowWriterProperties.Builder* props) except -1:
 *         if self.coerce_timestamps == 'ms':
 */

  /* 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("pyarrow._parquet.ParquetWriter._set_coerce_timestamps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1301
 *                              .format(self.coerce_timestamps))
 * 
 *     cdef void _set_allow_truncated_timestamps(             # <<<<<<<<<<<<<<
 *             self, ArrowWriterProperties.Builder* props):
 *         if self.allow_truncated_timestamps:
 */

static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_allow_truncated_timestamps(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::ArrowWriterProperties::Builder *__pyx_v_props) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("_set_allow_truncated_timestamps", 0);

  /* "pyarrow/_parquet.pyx":1303
 *     cdef void _set_allow_truncated_timestamps(
 *             self, ArrowWriterProperties.Builder* props):
 *         if self.allow_truncated_timestamps:             # <<<<<<<<<<<<<<
 *             props.allow_truncated_timestamps()
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_self->allow_truncated_timestamps); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1303, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1304
 *             self, ArrowWriterProperties.Builder* props):
 *         if self.allow_truncated_timestamps:
 *             props.allow_truncated_timestamps()             # <<<<<<<<<<<<<<
 *         else:
 *             props.disallow_truncated_timestamps()
 */
    (void)(__pyx_v_props->allow_truncated_timestamps());

    /* "pyarrow/_parquet.pyx":1303
 *     cdef void _set_allow_truncated_timestamps(
 *             self, ArrowWriterProperties.Builder* props):
 *         if self.allow_truncated_timestamps:             # <<<<<<<<<<<<<<
 *             props.allow_truncated_timestamps()
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1306
 *             props.allow_truncated_timestamps()
 *         else:
 *             props.disallow_truncated_timestamps()             # <<<<<<<<<<<<<<
 * 
 *     cdef void _set_version(self, WriterProperties.Builder* props):
 */
  /*else*/ {
    (void)(__pyx_v_props->disallow_truncated_timestamps());
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":1301
 *                              .format(self.coerce_timestamps))
 * 
 *     cdef void _set_allow_truncated_timestamps(             # <<<<<<<<<<<<<<
 *             self, ArrowWriterProperties.Builder* props):
 *         if self.allow_truncated_timestamps:
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("pyarrow._parquet.ParquetWriter._set_allow_truncated_timestamps", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "pyarrow/_parquet.pyx":1308
 *             props.disallow_truncated_timestamps()
 * 
 *     cdef void _set_version(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if self.version is not None:
 *             if self.version == "1.0":
 */

static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_version(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props) {
  __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("_set_version", 0);

  /* "pyarrow/_parquet.pyx":1309
 * 
 *     cdef void _set_version(self, WriterProperties.Builder* props):
 *         if self.version is not None:             # <<<<<<<<<<<<<<
 *             if self.version == "1.0":
 *                 props.version(ParquetVersion_V1)
 */
  __pyx_t_1 = (__pyx_v_self->version != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":1310
 *     cdef void _set_version(self, WriterProperties.Builder* props):
 *         if self.version is not None:
 *             if self.version == "1.0":             # <<<<<<<<<<<<<<
 *                 props.version(ParquetVersion_V1)
 *             elif self.version == "2.0":
 */
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->version, __pyx_kp_u_1_0, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1310, __pyx_L1_error)
    if (__pyx_t_2) {

      /* "pyarrow/_parquet.pyx":1311
 *         if self.version is not None:
 *             if self.version == "1.0":
 *                 props.version(ParquetVersion_V1)             # <<<<<<<<<<<<<<
 *             elif self.version == "2.0":
 *                 props.version(ParquetVersion_V2)
 */
      (void)(__pyx_v_props->version( parquet::ParquetVersion::PARQUET_1_0));

      /* "pyarrow/_parquet.pyx":1310
 *     cdef void _set_version(self, WriterProperties.Builder* props):
 *         if self.version is not None:
 *             if self.version == "1.0":             # <<<<<<<<<<<<<<
 *                 props.version(ParquetVersion_V1)
 *             elif self.version == "2.0":
 */
      goto __pyx_L4;
    }

    /* "pyarrow/_parquet.pyx":1312
 *             if self.version == "1.0":
 *                 props.version(ParquetVersion_V1)
 *             elif self.version == "2.0":             # <<<<<<<<<<<<<<
 *                 props.version(ParquetVersion_V2)
 *             else:
 */
    __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->version, __pyx_kp_u_2_0, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1312, __pyx_L1_error)
    if (likely(__pyx_t_2)) {

      /* "pyarrow/_parquet.pyx":1313
 *                 props.version(ParquetVersion_V1)
 *             elif self.version == "2.0":
 *                 props.version(ParquetVersion_V2)             # <<<<<<<<<<<<<<
 *             else:
 *                 raise ArrowException("Unsupported Parquet format version")
 */
      (void)(__pyx_v_props->version( parquet::ParquetVersion::PARQUET_2_0));

      /* "pyarrow/_parquet.pyx":1312
 *             if self.version == "1.0":
 *                 props.version(ParquetVersion_V1)
 *             elif self.version == "2.0":             # <<<<<<<<<<<<<<
 *                 props.version(ParquetVersion_V2)
 *             else:
 */
      goto __pyx_L4;
    }

    /* "pyarrow/_parquet.pyx":1315
 *                 props.version(ParquetVersion_V2)
 *             else:
 *                 raise ArrowException("Unsupported Parquet format version")             # <<<<<<<<<<<<<<
 * 
 *     cdef void _set_compression_props(self, WriterProperties.Builder* props):
 */
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ArrowException); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1315, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __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_kp_u_Unsupported_Parquet_format_versi) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_Unsupported_Parquet_format_versi);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1315, __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(0, 1315, __pyx_L1_error)
    }
    __pyx_L4:;

    /* "pyarrow/_parquet.pyx":1309
 * 
 *     cdef void _set_version(self, WriterProperties.Builder* props):
 *         if self.version is not None:             # <<<<<<<<<<<<<<
 *             if self.version == "1.0":
 *                 props.version(ParquetVersion_V1)
 */
  }

  /* "pyarrow/_parquet.pyx":1308
 *             props.disallow_truncated_timestamps()
 * 
 *     cdef void _set_version(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if self.version is not None:
 *             if self.version == "1.0":
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_WriteUnraisable("pyarrow._parquet.ParquetWriter._set_version", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "pyarrow/_parquet.pyx":1317
 *                 raise ArrowException("Unsupported Parquet format version")
 * 
 *     cdef void _set_compression_props(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if isinstance(self.compression, basestring):
 *             check_compression_name(self.compression)
 */

static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_compression_props(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props) {
  PyObject *__pyx_v_column = NULL;
  PyObject *__pyx_v_codec = NULL;
  PyObject *__pyx_v_level = NULL;
  __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;
  Py_ssize_t __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  std::string __pyx_t_10;
  __Pyx_RefNannySetupContext("_set_compression_props", 0);

  /* "pyarrow/_parquet.pyx":1318
 * 
 *     cdef void _set_compression_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.compression, basestring):             # <<<<<<<<<<<<<<
 *             check_compression_name(self.compression)
 *             props.compression(compression_from_name(self.compression))
 */
  __pyx_t_1 = __pyx_v_self->compression;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyBaseString_Check(__pyx_t_1); 
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pyarrow/_parquet.pyx":1319
 *     cdef void _set_compression_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.compression, basestring):
 *             check_compression_name(self.compression)             # <<<<<<<<<<<<<<
 *             props.compression(compression_from_name(self.compression))
 *         elif self.compression is not None:
 */
    __pyx_t_1 = __pyx_v_self->compression;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = __pyx_f_7pyarrow_8_parquet_check_compression_name(__pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1319, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":1320
 *         if isinstance(self.compression, basestring):
 *             check_compression_name(self.compression)
 *             props.compression(compression_from_name(self.compression))             # <<<<<<<<<<<<<<
 *         elif self.compression is not None:
 *             for column, codec in self.compression.iteritems():
 */
    __pyx_t_1 = __pyx_v_self->compression;
    __Pyx_INCREF(__pyx_t_1);
    (void)(__pyx_v_props->compression(__pyx_f_7pyarrow_8_parquet_compression_from_name(__pyx_t_1)));
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":1318
 * 
 *     cdef void _set_compression_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.compression, basestring):             # <<<<<<<<<<<<<<
 *             check_compression_name(self.compression)
 *             props.compression(compression_from_name(self.compression))
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1321
 *             check_compression_name(self.compression)
 *             props.compression(compression_from_name(self.compression))
 *         elif self.compression is not None:             # <<<<<<<<<<<<<<
 *             for column, codec in self.compression.iteritems():
 *                 check_compression_name(codec)
 */
  __pyx_t_3 = (__pyx_v_self->compression != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":1322
 *             props.compression(compression_from_name(self.compression))
 *         elif self.compression is not None:
 *             for column, codec in self.compression.iteritems():             # <<<<<<<<<<<<<<
 *                 check_compression_name(codec)
 *                 props.compression(column, compression_from_name(codec))
 */
    __pyx_t_5 = 0;
    if (unlikely(__pyx_v_self->compression == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "iteritems");
      __PYX_ERR(0, 1322, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_self->compression, 0, __pyx_n_s_iteritems, (&__pyx_t_6), (&__pyx_t_4)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1322, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_7, &__pyx_t_8, NULL, __pyx_t_4);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1322, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_v_codec, __pyx_t_8);
      __pyx_t_8 = 0;

      /* "pyarrow/_parquet.pyx":1323
 *         elif self.compression is not None:
 *             for column, codec in self.compression.iteritems():
 *                 check_compression_name(codec)             # <<<<<<<<<<<<<<
 *                 props.compression(column, compression_from_name(codec))
 * 
 */
      __pyx_t_9 = __pyx_f_7pyarrow_8_parquet_check_compression_name(__pyx_v_codec); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1323, __pyx_L1_error)

      /* "pyarrow/_parquet.pyx":1324
 *             for column, codec in self.compression.iteritems():
 *                 check_compression_name(codec)
 *                 props.compression(column, compression_from_name(codec))             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(self.compression_level, int):
 */
      __pyx_t_10 = __pyx_convert_string_from_py_std__in_string(__pyx_v_column); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1324, __pyx_L1_error)
      (void)(__pyx_v_props->compression(__pyx_t_10, __pyx_f_7pyarrow_8_parquet_compression_from_name(__pyx_v_codec)));
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":1321
 *             check_compression_name(self.compression)
 *             props.compression(compression_from_name(self.compression))
 *         elif self.compression is not None:             # <<<<<<<<<<<<<<
 *             for column, codec in self.compression.iteritems():
 *                 check_compression_name(codec)
 */
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":1326
 *                 props.compression(column, compression_from_name(codec))
 * 
 *         if isinstance(self.compression_level, int):             # <<<<<<<<<<<<<<
 *             props.compression_level(self.compression_level)
 *         elif self.compression_level is not None:
 */
  __pyx_t_1 = __pyx_v_self->compression_level;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyInt_Check(__pyx_t_1); 
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pyarrow/_parquet.pyx":1327
 * 
 *         if isinstance(self.compression_level, int):
 *             props.compression_level(self.compression_level)             # <<<<<<<<<<<<<<
 *         elif self.compression_level is not None:
 *             for column, level in self.compression_level.iteritems():
 */
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_self->compression_level); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1327, __pyx_L1_error)
    (void)(__pyx_v_props->compression_level(__pyx_t_4));

    /* "pyarrow/_parquet.pyx":1326
 *                 props.compression(column, compression_from_name(codec))
 * 
 *         if isinstance(self.compression_level, int):             # <<<<<<<<<<<<<<
 *             props.compression_level(self.compression_level)
 *         elif self.compression_level is not None:
 */
    goto __pyx_L6;
  }

  /* "pyarrow/_parquet.pyx":1328
 *         if isinstance(self.compression_level, int):
 *             props.compression_level(self.compression_level)
 *         elif self.compression_level is not None:             # <<<<<<<<<<<<<<
 *             for column, level in self.compression_level.iteritems():
 *                 props.compression_level(column, level)
 */
  __pyx_t_3 = (__pyx_v_self->compression_level != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":1329
 *             props.compression_level(self.compression_level)
 *         elif self.compression_level is not None:
 *             for column, level in self.compression_level.iteritems():             # <<<<<<<<<<<<<<
 *                 props.compression_level(column, level)
 * 
 */
    __pyx_t_6 = 0;
    if (unlikely(__pyx_v_self->compression_level == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "iteritems");
      __PYX_ERR(0, 1329, __pyx_L1_error)
    }
    __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_self->compression_level, 0, __pyx_n_s_iteritems, (&__pyx_t_5), (&__pyx_t_4)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1329, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_8;
    __pyx_t_8 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_5, &__pyx_t_6, &__pyx_t_8, &__pyx_t_7, NULL, __pyx_t_4);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(0, 1329, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_XDECREF_SET(__pyx_v_level, __pyx_t_7);
      __pyx_t_7 = 0;

      /* "pyarrow/_parquet.pyx":1330
 *         elif self.compression_level is not None:
 *             for column, level in self.compression_level.iteritems():
 *                 props.compression_level(column, level)             # <<<<<<<<<<<<<<
 * 
 *     cdef void _set_dictionary_props(self, WriterProperties.Builder* props):
 */
      __pyx_t_10 = __pyx_convert_string_from_py_std__in_string(__pyx_v_column); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1330, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_level); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1330, __pyx_L1_error)
      (void)(__pyx_v_props->compression_level(__pyx_t_10, __pyx_t_9));
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyarrow/_parquet.pyx":1328
 *         if isinstance(self.compression_level, int):
 *             props.compression_level(self.compression_level)
 *         elif self.compression_level is not None:             # <<<<<<<<<<<<<<
 *             for column, level in self.compression_level.iteritems():
 *                 props.compression_level(column, level)
 */
  }
  __pyx_L6:;

  /* "pyarrow/_parquet.pyx":1317
 *                 raise ArrowException("Unsupported Parquet format version")
 * 
 *     cdef void _set_compression_props(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if isinstance(self.compression, basestring):
 *             check_compression_name(self.compression)
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_WriteUnraisable("pyarrow._parquet.ParquetWriter._set_compression_props", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_column);
  __Pyx_XDECREF(__pyx_v_codec);
  __Pyx_XDECREF(__pyx_v_level);
  __Pyx_RefNannyFinishContext();
}

/* "pyarrow/_parquet.pyx":1332
 *                 props.compression_level(column, level)
 * 
 *     cdef void _set_dictionary_props(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if isinstance(self.use_dictionary, bool):
 *             if self.use_dictionary:
 */

static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_dictionary_props(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props) {
  PyObject *__pyx_v_column = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  std::string __pyx_t_7;
  __Pyx_RefNannySetupContext("_set_dictionary_props", 0);

  /* "pyarrow/_parquet.pyx":1333
 * 
 *     cdef void _set_dictionary_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.use_dictionary, bool):             # <<<<<<<<<<<<<<
 *             if self.use_dictionary:
 *                 props.enable_dictionary()
 */
  __pyx_t_1 = __pyx_v_self->use_dictionary;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject*)&PyBool_Type);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":1334
 *     cdef void _set_dictionary_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.use_dictionary, bool):
 *             if self.use_dictionary:             # <<<<<<<<<<<<<<
 *                 props.enable_dictionary()
 *             else:
 */
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_self->use_dictionary); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1334, __pyx_L1_error)
    if (__pyx_t_4) {

      /* "pyarrow/_parquet.pyx":1335
 *         if isinstance(self.use_dictionary, bool):
 *             if self.use_dictionary:
 *                 props.enable_dictionary()             # <<<<<<<<<<<<<<
 *             else:
 *                 props.disable_dictionary()
 */
      (void)(__pyx_v_props->enable_dictionary());

      /* "pyarrow/_parquet.pyx":1334
 *     cdef void _set_dictionary_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.use_dictionary, bool):
 *             if self.use_dictionary:             # <<<<<<<<<<<<<<
 *                 props.enable_dictionary()
 *             else:
 */
      goto __pyx_L4;
    }

    /* "pyarrow/_parquet.pyx":1337
 *                 props.enable_dictionary()
 *             else:
 *                 props.disable_dictionary()             # <<<<<<<<<<<<<<
 *         elif self.use_dictionary is not None:
 *             # Deactivate dictionary encoding by default
 */
    /*else*/ {
      (void)(__pyx_v_props->disable_dictionary());
    }
    __pyx_L4:;

    /* "pyarrow/_parquet.pyx":1333
 * 
 *     cdef void _set_dictionary_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.use_dictionary, bool):             # <<<<<<<<<<<<<<
 *             if self.use_dictionary:
 *                 props.enable_dictionary()
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1338
 *             else:
 *                 props.disable_dictionary()
 *         elif self.use_dictionary is not None:             # <<<<<<<<<<<<<<
 *             # Deactivate dictionary encoding by default
 *             props.disable_dictionary()
 */
  __pyx_t_4 = (__pyx_v_self->use_dictionary != Py_None);
  __pyx_t_3 = (__pyx_t_4 != 0);
  if (__pyx_t_3) {

    /* "pyarrow/_parquet.pyx":1340
 *         elif self.use_dictionary is not None:
 *             # Deactivate dictionary encoding by default
 *             props.disable_dictionary()             # <<<<<<<<<<<<<<
 *             for column in self.use_dictionary:
 *                 props.enable_dictionary(column)
 */
    (void)(__pyx_v_props->disable_dictionary());

    /* "pyarrow/_parquet.pyx":1341
 *             # Deactivate dictionary encoding by default
 *             props.disable_dictionary()
 *             for column in self.use_dictionary:             # <<<<<<<<<<<<<<
 *                 props.enable_dictionary(column)
 * 
 */
    if (likely(PyList_CheckExact(__pyx_v_self->use_dictionary)) || PyTuple_CheckExact(__pyx_v_self->use_dictionary)) {
      __pyx_t_2 = __pyx_v_self->use_dictionary; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self->use_dictionary); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1341, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1341, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1341, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1341, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_6(__pyx_t_2);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1341, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "pyarrow/_parquet.pyx":1342
 *             props.disable_dictionary()
 *             for column in self.use_dictionary:
 *                 props.enable_dictionary(column)             # <<<<<<<<<<<<<<
 * 
 *     cdef void _set_statistics_props(self, WriterProperties.Builder* props):
 */
      __pyx_t_7 = __pyx_convert_string_from_py_std__in_string(__pyx_v_column); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1342, __pyx_L1_error)
      (void)(__pyx_v_props->enable_dictionary(__pyx_t_7));

      /* "pyarrow/_parquet.pyx":1341
 *             # Deactivate dictionary encoding by default
 *             props.disable_dictionary()
 *             for column in self.use_dictionary:             # <<<<<<<<<<<<<<
 *                 props.enable_dictionary(column)
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1338
 *             else:
 *                 props.disable_dictionary()
 *         elif self.use_dictionary is not None:             # <<<<<<<<<<<<<<
 *             # Deactivate dictionary encoding by default
 *             props.disable_dictionary()
 */
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":1332
 *                 props.compression_level(column, level)
 * 
 *     cdef void _set_dictionary_props(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if isinstance(self.use_dictionary, bool):
 *             if self.use_dictionary:
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_WriteUnraisable("pyarrow._parquet.ParquetWriter._set_dictionary_props", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_column);
  __Pyx_RefNannyFinishContext();
}

/* "pyarrow/_parquet.pyx":1344
 *                 props.enable_dictionary(column)
 * 
 *     cdef void _set_statistics_props(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if isinstance(self.write_statistics, bool):
 *             if self.write_statistics:
 */

static void __pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_statistics_props(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, parquet::WriterProperties::Builder *__pyx_v_props) {
  PyObject *__pyx_v_column = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  std::string __pyx_t_9;
  __Pyx_RefNannySetupContext("_set_statistics_props", 0);

  /* "pyarrow/_parquet.pyx":1345
 * 
 *     cdef void _set_statistics_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.write_statistics, bool):             # <<<<<<<<<<<<<<
 *             if self.write_statistics:
 *                 props.enable_statistics()
 */
  __pyx_t_1 = __pyx_v_self->write_statistics;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject*)&PyBool_Type);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1345, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "pyarrow/_parquet.pyx":1346
 *     cdef void _set_statistics_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.write_statistics, bool):
 *             if self.write_statistics:             # <<<<<<<<<<<<<<
 *                 props.enable_statistics()
 *             else:
 */
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_self->write_statistics); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1346, __pyx_L1_error)
    if (__pyx_t_4) {

      /* "pyarrow/_parquet.pyx":1347
 *         if isinstance(self.write_statistics, bool):
 *             if self.write_statistics:
 *                 props.enable_statistics()             # <<<<<<<<<<<<<<
 *             else:
 *                 props.disable_statistics()
 */
      (void)(__pyx_v_props->enable_statistics());

      /* "pyarrow/_parquet.pyx":1346
 *     cdef void _set_statistics_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.write_statistics, bool):
 *             if self.write_statistics:             # <<<<<<<<<<<<<<
 *                 props.enable_statistics()
 *             else:
 */
      goto __pyx_L4;
    }

    /* "pyarrow/_parquet.pyx":1349
 *                 props.enable_statistics()
 *             else:
 *                 props.disable_statistics()             # <<<<<<<<<<<<<<
 *         elif self.write_statistics is not None:
 *             # Deactivate statistics by default and enable for specified columns
 */
    /*else*/ {
      (void)(__pyx_v_props->disable_statistics());
    }
    __pyx_L4:;

    /* "pyarrow/_parquet.pyx":1345
 * 
 *     cdef void _set_statistics_props(self, WriterProperties.Builder* props):
 *         if isinstance(self.write_statistics, bool):             # <<<<<<<<<<<<<<
 *             if self.write_statistics:
 *                 props.enable_statistics()
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1350
 *             else:
 *                 props.disable_statistics()
 *         elif self.write_statistics is not None:             # <<<<<<<<<<<<<<
 *             # Deactivate statistics by default and enable for specified columns
 *             props.disable_statistics()
 */
  __pyx_t_4 = (__pyx_v_self->write_statistics != Py_None);
  __pyx_t_3 = (__pyx_t_4 != 0);
  if (__pyx_t_3) {

    /* "pyarrow/_parquet.pyx":1352
 *         elif self.write_statistics is not None:
 *             # Deactivate statistics by default and enable for specified columns
 *             props.disable_statistics()             # <<<<<<<<<<<<<<
 *             for column in self.write_statistics:
 *                 props.enable_statistics(tobytes(column))
 */
    (void)(__pyx_v_props->disable_statistics());

    /* "pyarrow/_parquet.pyx":1353
 *             # Deactivate statistics by default and enable for specified columns
 *             props.disable_statistics()
 *             for column in self.write_statistics:             # <<<<<<<<<<<<<<
 *                 props.enable_statistics(tobytes(column))
 * 
 */
    if (likely(PyList_CheckExact(__pyx_v_self->write_statistics)) || PyTuple_CheckExact(__pyx_v_self->write_statistics)) {
      __pyx_t_2 = __pyx_v_self->write_statistics; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_self->write_statistics); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1353, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1353, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1353, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1353, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_6(__pyx_t_2);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1353, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_column, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "pyarrow/_parquet.pyx":1354
 *             props.disable_statistics()
 *             for column in self.write_statistics:
 *                 props.enable_statistics(tobytes(column))             # <<<<<<<<<<<<<<
 * 
 *     def close(self):
 */
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1354, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(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_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_v_column) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_column);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1354, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_9 = __pyx_convert_string_from_py_std__in_string(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1354, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      (void)(__pyx_v_props->enable_statistics(__pyx_t_9));

      /* "pyarrow/_parquet.pyx":1353
 *             # Deactivate statistics by default and enable for specified columns
 *             props.disable_statistics()
 *             for column in self.write_statistics:             # <<<<<<<<<<<<<<
 *                 props.enable_statistics(tobytes(column))
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1350
 *             else:
 *                 props.disable_statistics()
 *         elif self.write_statistics is not None:             # <<<<<<<<<<<<<<
 *             # Deactivate statistics by default and enable for specified columns
 *             props.disable_statistics()
 */
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":1344
 *                 props.enable_dictionary(column)
 * 
 *     cdef void _set_statistics_props(self, WriterProperties.Builder* props):             # <<<<<<<<<<<<<<
 *         if isinstance(self.write_statistics, bool):
 *             if self.write_statistics:
 */

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_WriteUnraisable("pyarrow._parquet.ParquetWriter._set_statistics_props", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_column);
  __Pyx_RefNannyFinishContext();
}

/* "pyarrow/_parquet.pyx":1356
 *                 props.enable_statistics(tobytes(column))
 * 
 *     def close(self):             # <<<<<<<<<<<<<<
 *         with nogil:
 *             check_status(self.writer.get().Close())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_3close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_2close[] = "ParquetWriter.close(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_3close(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("close (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_2close(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_2close(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("close", 0);

  /* "pyarrow/_parquet.pyx":1357
 * 
 *     def close(self):
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.writer.get().Close())
 *             if self.own_sink:
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1358
 *     def close(self):
 *         with nogil:
 *             check_status(self.writer.get().Close())             # <<<<<<<<<<<<<<
 *             if self.own_sink:
 *                 check_status(self.sink.get().Close())
 */
        __pyx_t_1 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->writer.get()->Close()); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1358, __pyx_L4_error)

        /* "pyarrow/_parquet.pyx":1359
 *         with nogil:
 *             check_status(self.writer.get().Close())
 *             if self.own_sink:             # <<<<<<<<<<<<<<
 *                 check_status(self.sink.get().Close())
 * 
 */
        __pyx_t_2 = (__pyx_v_self->own_sink != 0);
        if (__pyx_t_2) {

          /* "pyarrow/_parquet.pyx":1360
 *             check_status(self.writer.get().Close())
 *             if self.own_sink:
 *                 check_status(self.sink.get().Close())             # <<<<<<<<<<<<<<
 * 
 *     def write_table(self, Table table, row_group_size=None):
 */
          __pyx_t_1 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->sink.get()->Close()); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1360, __pyx_L4_error)

          /* "pyarrow/_parquet.pyx":1359
 *         with nogil:
 *             check_status(self.writer.get().Close())
 *             if self.own_sink:             # <<<<<<<<<<<<<<
 *                 check_status(self.sink.get().Close())
 * 
 */
        }
      }

      /* "pyarrow/_parquet.pyx":1357
 * 
 *     def close(self):
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.writer.get().Close())
 *             if self.own_sink:
 */
      /*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:;
      }
  }

  /* "pyarrow/_parquet.pyx":1356
 *                 props.enable_statistics(tobytes(column))
 * 
 *     def close(self):             # <<<<<<<<<<<<<<
 *         with nogil:
 *             check_status(self.writer.get().Close())
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.close", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1362
 *                 check_status(self.sink.get().Close())
 * 
 *     def write_table(self, Table table, row_group_size=None):             # <<<<<<<<<<<<<<
 *         cdef:
 *             CTable* ctable = table.table
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_5write_table(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_4write_table[] = "ParquetWriter.write_table(self, Table table, row_group_size=None)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_5write_table(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3lib_Table *__pyx_v_table = 0;
  PyObject *__pyx_v_row_group_size = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("write_table (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_table,&__pyx_n_s_row_group_size,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_table)) != 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_row_group_size);
          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_table") < 0)) __PYX_ERR(0, 1362, __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_table = ((struct __pyx_obj_7pyarrow_3lib_Table *)values[0]);
    __pyx_v_row_group_size = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("write_table", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1362, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.write_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_table), __pyx_ptype_7pyarrow_3lib_Table, 1, "table", 0))) __PYX_ERR(0, 1362, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_4write_table(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self), __pyx_v_table, __pyx_v_row_group_size);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_4write_table(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Table *__pyx_v_table, PyObject *__pyx_v_row_group_size) {
   arrow::Table *__pyx_v_ctable;
  int64_t __pyx_v_c_row_group_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   arrow::Table *__pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int64_t __pyx_t_6;
  int __pyx_t_7;
  __Pyx_RefNannySetupContext("write_table", 0);

  /* "pyarrow/_parquet.pyx":1364
 *     def write_table(self, Table table, row_group_size=None):
 *         cdef:
 *             CTable* ctable = table.table             # <<<<<<<<<<<<<<
 *             int64_t c_row_group_size
 * 
 */
  __pyx_t_1 = __pyx_v_table->table;
  __pyx_v_ctable = __pyx_t_1;

  /* "pyarrow/_parquet.pyx":1367
 *             int64_t c_row_group_size
 * 
 *         if row_group_size is None or row_group_size == -1:             # <<<<<<<<<<<<<<
 *             c_row_group_size = ctable.num_rows()
 *         elif row_group_size == 0:
 */
  __pyx_t_3 = (__pyx_v_row_group_size == 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_5 = __Pyx_PyInt_EqObjC(__pyx_v_row_group_size, __pyx_int_neg_1, -1L, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 1367, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_2 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "pyarrow/_parquet.pyx":1368
 * 
 *         if row_group_size is None or row_group_size == -1:
 *             c_row_group_size = ctable.num_rows()             # <<<<<<<<<<<<<<
 *         elif row_group_size == 0:
 *             raise ValueError('Row group size cannot be 0')
 */
    __pyx_v_c_row_group_size = __pyx_v_ctable->num_rows();

    /* "pyarrow/_parquet.pyx":1367
 *             int64_t c_row_group_size
 * 
 *         if row_group_size is None or row_group_size == -1:             # <<<<<<<<<<<<<<
 *             c_row_group_size = ctable.num_rows()
 *         elif row_group_size == 0:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_parquet.pyx":1369
 *         if row_group_size is None or row_group_size == -1:
 *             c_row_group_size = ctable.num_rows()
 *         elif row_group_size == 0:             # <<<<<<<<<<<<<<
 *             raise ValueError('Row group size cannot be 0')
 *         else:
 */
  __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_v_row_group_size, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1369, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(__pyx_t_2)) {

    /* "pyarrow/_parquet.pyx":1370
 *             c_row_group_size = ctable.num_rows()
 *         elif row_group_size == 0:
 *             raise ValueError('Row group size cannot be 0')             # <<<<<<<<<<<<<<
 *         else:
 *             c_row_group_size = row_group_size
 */
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1370, __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(0, 1370, __pyx_L1_error)

    /* "pyarrow/_parquet.pyx":1369
 *         if row_group_size is None or row_group_size == -1:
 *             c_row_group_size = ctable.num_rows()
 *         elif row_group_size == 0:             # <<<<<<<<<<<<<<
 *             raise ValueError('Row group size cannot be 0')
 *         else:
 */
  }

  /* "pyarrow/_parquet.pyx":1372
 *             raise ValueError('Row group size cannot be 0')
 *         else:
 *             c_row_group_size = row_group_size             # <<<<<<<<<<<<<<
 * 
 *         with nogil:
 */
  /*else*/ {
    __pyx_t_6 = __Pyx_PyInt_As_int64_t(__pyx_v_row_group_size); if (unlikely((__pyx_t_6 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1372, __pyx_L1_error)
    __pyx_v_c_row_group_size = __pyx_t_6;
  }
  __pyx_L3:;

  /* "pyarrow/_parquet.pyx":1374
 *             c_row_group_size = row_group_size
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.writer.get()
 *                          .WriteTable(deref(ctable), c_row_group_size))
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1375
 * 
 *         with nogil:
 *             check_status(self.writer.get()             # <<<<<<<<<<<<<<
 *                          .WriteTable(deref(ctable), c_row_group_size))
 * 
 */
        __pyx_t_7 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->writer.get()->WriteTable((*__pyx_v_ctable), __pyx_v_c_row_group_size)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 1375, __pyx_L7_error)
      }

      /* "pyarrow/_parquet.pyx":1374
 *             c_row_group_size = row_group_size
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             check_status(self.writer.get()
 *                          .WriteTable(deref(ctable), c_row_group_size))
 */
      /*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:;
      }
  }

  /* "pyarrow/_parquet.pyx":1362
 *                 check_status(self.sink.get().Close())
 * 
 *     def write_table(self, Table table, row_group_size=None):             # <<<<<<<<<<<<<<
 *         cdef:
 *             CTable* ctable = table.table
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.write_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1379
 * 
 *     @property
 *     def metadata(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CFileMetaData] metadata
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_8metadata_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_8metadata_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_8metadata___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_8metadata___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  std::shared_ptr< parquet::FileMetaData>  __pyx_v_metadata;
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  bool __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_parquet.pyx":1383
 *             shared_ptr[CFileMetaData] metadata
 *             FileMetaData result
 *         with nogil:             # <<<<<<<<<<<<<<
 *             metadata = self.writer.get().metadata()
 *         if metadata:
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_parquet.pyx":1384
 *             FileMetaData result
 *         with nogil:
 *             metadata = self.writer.get().metadata()             # <<<<<<<<<<<<<<
 *         if metadata:
 *             result = FileMetaData()
 */
        __pyx_v_metadata = __pyx_v_self->writer.get()->metadata();
      }

      /* "pyarrow/_parquet.pyx":1383
 *             shared_ptr[CFileMetaData] metadata
 *             FileMetaData result
 *         with nogil:             # <<<<<<<<<<<<<<
 *             metadata = self.writer.get().metadata()
 *         if metadata:
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }

  /* "pyarrow/_parquet.pyx":1385
 *         with nogil:
 *             metadata = self.writer.get().metadata()
 *         if metadata:             # <<<<<<<<<<<<<<
 *             result = FileMetaData()
 *             result.init(metadata)
 */
  __pyx_t_1 = __pyx_v_metadata.operator bool();
  if (__pyx_t_1) {

    /* "pyarrow/_parquet.pyx":1386
 *             metadata = self.writer.get().metadata()
 *         if metadata:
 *             result = FileMetaData()             # <<<<<<<<<<<<<<
 *             result.init(metadata)
 *             return result
 */
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_7pyarrow_8_parquet_FileMetaData)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_result = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1387
 *         if metadata:
 *             result = FileMetaData()
 *             result.init(metadata)             # <<<<<<<<<<<<<<
 *             return result
 *         raise RuntimeError(
 */
    __pyx_t_2 = ((struct __pyx_vtabstruct_7pyarrow_8_parquet_FileMetaData *)__pyx_v_result->__pyx_vtab)->init(__pyx_v_result, __pyx_v_metadata); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "pyarrow/_parquet.pyx":1388
 *             result = FileMetaData()
 *             result.init(metadata)
 *             return result             # <<<<<<<<<<<<<<
 *         raise RuntimeError(
 *             'file metadata is only available after writer close')
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)__pyx_v_result));
    __pyx_r = ((PyObject *)__pyx_v_result);
    goto __pyx_L0;

    /* "pyarrow/_parquet.pyx":1385
 *         with nogil:
 *             metadata = self.writer.get().metadata()
 *         if metadata:             # <<<<<<<<<<<<<<
 *             result = FileMetaData()
 *             result.init(metadata)
 */
  }

  /* "pyarrow/_parquet.pyx":1389
 *             result.init(metadata)
 *             return result
 *         raise RuntimeError(             # <<<<<<<<<<<<<<
 *             'file metadata is only available after writer close')
 */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1389, __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, 1389, __pyx_L1_error)

  /* "pyarrow/_parquet.pyx":1379
 * 
 *     @property
 *     def metadata(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CFileMetaData] metadata
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.metadata.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1209
 * 
 *     cdef readonly:
 *         object use_dictionary             # <<<<<<<<<<<<<<
 *         object use_deprecated_int96_timestamps
 *         object coerce_timestamps
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14use_dictionary_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14use_dictionary_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14use_dictionary___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14use_dictionary___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->use_dictionary);
  __pyx_r = __pyx_v_self->use_dictionary;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1210
 *     cdef readonly:
 *         object use_dictionary
 *         object use_deprecated_int96_timestamps             # <<<<<<<<<<<<<<
 *         object coerce_timestamps
 *         object allow_truncated_timestamps
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_31use_deprecated_int96_timestamps_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_31use_deprecated_int96_timestamps_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_31use_deprecated_int96_timestamps___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_31use_deprecated_int96_timestamps___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->use_deprecated_int96_timestamps);
  __pyx_r = __pyx_v_self->use_deprecated_int96_timestamps;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1211
 *         object use_dictionary
 *         object use_deprecated_int96_timestamps
 *         object coerce_timestamps             # <<<<<<<<<<<<<<
 *         object allow_truncated_timestamps
 *         object compression
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_17coerce_timestamps_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_17coerce_timestamps_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_17coerce_timestamps___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_17coerce_timestamps___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->coerce_timestamps);
  __pyx_r = __pyx_v_self->coerce_timestamps;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1212
 *         object use_deprecated_int96_timestamps
 *         object coerce_timestamps
 *         object allow_truncated_timestamps             # <<<<<<<<<<<<<<
 *         object compression
 *         object compression_level
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_26allow_truncated_timestamps_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_26allow_truncated_timestamps_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_26allow_truncated_timestamps___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_26allow_truncated_timestamps___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->allow_truncated_timestamps);
  __pyx_r = __pyx_v_self->allow_truncated_timestamps;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1213
 *         object coerce_timestamps
 *         object allow_truncated_timestamps
 *         object compression             # <<<<<<<<<<<<<<
 *         object compression_level
 *         object version
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_11compression_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_11compression_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_11compression___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_11compression___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->compression);
  __pyx_r = __pyx_v_self->compression;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1214
 *         object allow_truncated_timestamps
 *         object compression
 *         object compression_level             # <<<<<<<<<<<<<<
 *         object version
 *         object write_statistics
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_17compression_level_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_17compression_level_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_17compression_level___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_17compression_level___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->compression_level);
  __pyx_r = __pyx_v_self->compression_level;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1215
 *         object compression
 *         object compression_level
 *         object version             # <<<<<<<<<<<<<<
 *         object write_statistics
 *         int row_group_size
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_7version_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_7version_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_7version___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_7version___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->version);
  __pyx_r = __pyx_v_self->version;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1216
 *         object compression_level
 *         object version
 *         object write_statistics             # <<<<<<<<<<<<<<
 *         int row_group_size
 *         int64_t data_page_size
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_16write_statistics_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_16write_statistics_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_16write_statistics___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_16write_statistics___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->write_statistics);
  __pyx_r = __pyx_v_self->write_statistics;
  goto __pyx_L0;

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

/* "pyarrow/_parquet.pyx":1217
 *         object version
 *         object write_statistics
 *         int row_group_size             # <<<<<<<<<<<<<<
 *         int64_t data_page_size
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14row_group_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14row_group_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14row_group_size___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14row_group_size___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__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_PyInt_From_int(__pyx_v_self->row_group_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1217, __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("pyarrow._parquet.ParquetWriter.row_group_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_parquet.pyx":1218
 *         object write_statistics
 *         int row_group_size
 *         int64_t data_page_size             # <<<<<<<<<<<<<<
 * 
 *     def __cinit__(self, where, Schema schema, use_dictionary=None,
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14data_page_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14data_page_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14data_page_size___get__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_14data_page_size___get__(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__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_PyInt_From_int64_t(__pyx_v_self->data_page_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __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("pyarrow._parquet.ParquetWriter.data_page_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_6__reduce_cython__[] = "ParquetWriter.__reduce_cython__(self)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_6__reduce_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __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(1, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static char __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_8__setstate_cython__[] = "ParquetWriter.__setstate_cython__(self, __pyx_state)";
static PyObject *__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_parquet_13ParquetWriter_8__setstate_cython__(((struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_parquet_13ParquetWriter_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __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(1, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._parquet.ParquetWriter.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/includes/common.pxd":82
 *     T GetResultValue[T](CResult[T]) except *
 * 
 * cdef inline object PyObject_to_object(PyObject* o):             # <<<<<<<<<<<<<<
 *     # Cast to "object" increments reference count
 *     cdef object result = <object> o
 */

static CYTHON_INLINE PyObject *__pyx_f_7pyarrow_8includes_6common_PyObject_to_object(PyObject *__pyx_v_o) {
  PyObject *__pyx_v_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("PyObject_to_object", 0);

  /* "pyarrow/includes/common.pxd":84
 * cdef inline object PyObject_to_object(PyObject* o):
 *     # Cast to "object" increments reference count
 *     cdef object result = <object> o             # <<<<<<<<<<<<<<
 *     cpython.Py_DECREF(result)
 *     return result
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_o);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_result = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/includes/common.pxd":85
 *     # Cast to "object" increments reference count
 *     cdef object result = <object> o
 *     cpython.Py_DECREF(result)             # <<<<<<<<<<<<<<
 *     return result
 */
  Py_DECREF(__pyx_v_result);

  /* "pyarrow/includes/common.pxd":86
 *     cdef object result = <object> o
 *     cpython.Py_DECREF(result)
 *     return result             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;

  /* "pyarrow/includes/common.pxd":82
 *     T GetResultValue[T](CResult[T]) except *
 * 
 * cdef inline object PyObject_to_object(PyObject* o):             # <<<<<<<<<<<<<<
 *     # Cast to "object" increments reference count
 *     cdef object result = <object> o
 */

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

/* "string.to_py":31
 * 
 * @cname("__pyx_convert_PyObject_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyObject_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyObject_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

static CYTHON_INLINE PyObject *__pyx_convert_PyObject_string_to_py_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pyx_convert_PyObject_string_to_py_std__in_string", 0);

  /* "string.to_py":32
 * @cname("__pyx_convert_PyObject_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyObject_string_to_py_std__in_string(const string& s):
 *     return __Pyx_PyObject_FromStringAndSize(s.data(), s.size())             # <<<<<<<<<<<<<<
 * cdef extern from *:
 *     cdef object __Pyx_PyUnicode_FromStringAndSize(const char*, size_t)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_FromStringAndSize(__pyx_v_s.data(), __pyx_v_s.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "string.to_py":31
 * 
 * @cname("__pyx_convert_PyObject_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyObject_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyObject_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

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

/* "string.to_py":37
 * 
 * @cname("__pyx_convert_PyUnicode_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyUnicode_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

static CYTHON_INLINE PyObject *__pyx_convert_PyUnicode_string_to_py_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pyx_convert_PyUnicode_string_to_py_std__in_string", 0);

  /* "string.to_py":38
 * @cname("__pyx_convert_PyUnicode_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_std__in_string(const string& s):
 *     return __Pyx_PyUnicode_FromStringAndSize(s.data(), s.size())             # <<<<<<<<<<<<<<
 * cdef extern from *:
 *     cdef object __Pyx_PyStr_FromStringAndSize(const char*, size_t)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_FromStringAndSize(__pyx_v_s.data(), __pyx_v_s.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "string.to_py":37
 * 
 * @cname("__pyx_convert_PyUnicode_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyUnicode_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyUnicode_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

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

/* "string.to_py":43
 * 
 * @cname("__pyx_convert_PyStr_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyStr_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyStr_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

static CYTHON_INLINE PyObject *__pyx_convert_PyStr_string_to_py_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pyx_convert_PyStr_string_to_py_std__in_string", 0);

  /* "string.to_py":44
 * @cname("__pyx_convert_PyStr_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyStr_string_to_py_std__in_string(const string& s):
 *     return __Pyx_PyStr_FromStringAndSize(s.data(), s.size())             # <<<<<<<<<<<<<<
 * cdef extern from *:
 *     cdef object __Pyx_PyBytes_FromStringAndSize(const char*, size_t)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyStr_FromStringAndSize(__pyx_v_s.data(), __pyx_v_s.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "string.to_py":43
 * 
 * @cname("__pyx_convert_PyStr_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyStr_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyStr_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

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

/* "string.to_py":49
 * 
 * @cname("__pyx_convert_PyBytes_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyBytes_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyBytes_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

static CYTHON_INLINE PyObject *__pyx_convert_PyBytes_string_to_py_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pyx_convert_PyBytes_string_to_py_std__in_string", 0);

  /* "string.to_py":50
 * @cname("__pyx_convert_PyBytes_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyBytes_string_to_py_std__in_string(const string& s):
 *     return __Pyx_PyBytes_FromStringAndSize(s.data(), s.size())             # <<<<<<<<<<<<<<
 * cdef extern from *:
 *     cdef object __Pyx_PyByteArray_FromStringAndSize(const char*, size_t)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_s.data(), __pyx_v_s.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "string.to_py":49
 * 
 * @cname("__pyx_convert_PyBytes_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyBytes_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyBytes_FromStringAndSize(s.data(), s.size())
 * cdef extern from *:
 */

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

/* "string.to_py":55
 * 
 * @cname("__pyx_convert_PyByteArray_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyByteArray_FromStringAndSize(s.data(), s.size())
 * 
 */

static CYTHON_INLINE PyObject *__pyx_convert_PyByteArray_string_to_py_std__in_string(std::string const &__pyx_v_s) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__pyx_convert_PyByteArray_string_to_py_std__in_string", 0);

  /* "string.to_py":56
 * @cname("__pyx_convert_PyByteArray_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_std__in_string(const string& s):
 *     return __Pyx_PyByteArray_FromStringAndSize(s.data(), s.size())             # <<<<<<<<<<<<<<
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyByteArray_FromStringAndSize(__pyx_v_s.data(), __pyx_v_s.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "string.to_py":55
 * 
 * @cname("__pyx_convert_PyByteArray_string_to_py_std__in_string")
 * cdef inline object __pyx_convert_PyByteArray_string_to_py_std__in_string(const string& s):             # <<<<<<<<<<<<<<
 *     return __Pyx_PyByteArray_FromStringAndSize(s.data(), s.size())
 * 
 */

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

/* "cfunc.to_py":65
 * @cname("__Pyx_CFunc_object____ParquetEncoding___to_py")
 * cdef object __Pyx_CFunc_object____ParquetEncoding___to_py(object (*f)(ParquetEncoding) ):
 *     def wrap(ParquetEncoding encoding_):             # <<<<<<<<<<<<<<
 *         """wrap(encoding_: 'ParquetEncoding')"""
 *         return f(encoding_)
 */

/* Python wrapper */
static PyObject *__pyx_pw_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_1wrap(PyObject *__pyx_self, PyObject *__pyx_arg_encoding_); /*proto*/
static char __pyx_doc_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_wrap[] = "wrap(encoding_: 'ParquetEncoding')";
static PyMethodDef __pyx_mdef_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_1wrap = {"wrap", (PyCFunction)__pyx_pw_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_1wrap, METH_O, __pyx_doc_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_wrap};
static PyObject *__pyx_pw_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_1wrap(PyObject *__pyx_self, PyObject *__pyx_arg_encoding_) {
  enum  parquet::Encoding::type __pyx_v_encoding_;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wrap (wrapper)", 0);
  assert(__pyx_arg_encoding_); {
    __pyx_v_encoding_ = ((enum  parquet::Encoding::type)__Pyx_PyInt_As_enum____parquet_3a__3a_Encoding_3a__3a_type(__pyx_arg_encoding_)); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 65, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_object____ParquetEncoding___to_py.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_wrap(__pyx_self, ((enum  parquet::Encoding::type)__pyx_v_encoding_));

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

static PyObject *__pyx_pf_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_wrap(PyObject *__pyx_self, enum  parquet::Encoding::type __pyx_v_encoding_) {
  struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *__pyx_cur_scope;
  struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *__pyx_outer_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);
  __pyx_outer_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;

  /* "cfunc.to_py":67
 *     def wrap(ParquetEncoding encoding_):
 *         """wrap(encoding_: 'ParquetEncoding')"""
 *         return f(encoding_)             # <<<<<<<<<<<<<<
 *     return wrap
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_f(__pyx_v_encoding_); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cfunc.to_py":65
 * @cname("__Pyx_CFunc_object____ParquetEncoding___to_py")
 * cdef object __Pyx_CFunc_object____ParquetEncoding___to_py(object (*f)(ParquetEncoding) ):
 *     def wrap(ParquetEncoding encoding_):             # <<<<<<<<<<<<<<
 *         """wrap(encoding_: 'ParquetEncoding')"""
 *         return f(encoding_)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_object____ParquetEncoding___to_py.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cfunc.to_py":64
 * 
 * @cname("__Pyx_CFunc_object____ParquetEncoding___to_py")
 * cdef object __Pyx_CFunc_object____ParquetEncoding___to_py(object (*f)(ParquetEncoding) ):             # <<<<<<<<<<<<<<
 *     def wrap(ParquetEncoding encoding_):
 *         """wrap(encoding_: 'ParquetEncoding')"""
 */

static PyObject *__Pyx_CFunc_object____ParquetEncoding___to_py(PyObject *(*__pyx_v_f)(enum  parquet::Encoding::type)) {
  struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *__pyx_cur_scope;
  PyObject *__pyx_v_wrap = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__Pyx_CFunc_object____ParquetEncoding___to_py", 0);
  __pyx_cur_scope = (struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *)__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py(__pyx_ptype___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(1, 64, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_f = __pyx_v_f;

  /* "cfunc.to_py":65
 * @cname("__Pyx_CFunc_object____ParquetEncoding___to_py")
 * cdef object __Pyx_CFunc_object____ParquetEncoding___to_py(object (*f)(ParquetEncoding) ):
 *     def wrap(ParquetEncoding encoding_):             # <<<<<<<<<<<<<<
 *         """wrap(encoding_: 'ParquetEncoding')"""
 *         return f(encoding_)
 */
  __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11cfunc_dot_to_py_45__Pyx_CFunc_object____ParquetEncoding___to_py_1wrap, 0, __pyx_n_s_Pyx_CFunc_object____ParquetEnc, ((PyObject*)__pyx_cur_scope), __pyx_n_s_cfunc_to_py, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_wrap = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "cfunc.to_py":68
 *         """wrap(encoding_: 'ParquetEncoding')"""
 *         return f(encoding_)
 *     return wrap             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_wrap);
  __pyx_r = __pyx_v_wrap;
  goto __pyx_L0;

  /* "cfunc.to_py":64
 * 
 * @cname("__Pyx_CFunc_object____ParquetEncoding___to_py")
 * cdef object __Pyx_CFunc_object____ParquetEncoding___to_py(object (*f)(ParquetEncoding) ):             # <<<<<<<<<<<<<<
 *     def wrap(ParquetEncoding encoding_):
 *         """wrap(encoding_: 'ParquetEncoding')"""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cfunc.to_py.__Pyx_CFunc_object____ParquetEncoding___to_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_wrap);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "vector.to_py":60
 * 
 * @cname("__pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type")
 * cdef object __pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type(vector[X]& v):             # <<<<<<<<<<<<<<
 *     return [v[i] for i in range(v.size())]
 * 
 */

static PyObject *__pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type(const std::vector<enum  parquet::Encoding::type>  &__pyx_v_v) {
  size_t __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  size_t __pyx_t_2;
  size_t __pyx_t_3;
  size_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type", 0);

  /* "vector.to_py":61
 * @cname("__pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type")
 * cdef object __pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type(vector[X]& v):
 *     return [v[i] for i in range(v.size())]             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_v_v.size();
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_i = __pyx_t_4;
    __pyx_t_5 = __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 61, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 61, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "vector.to_py":60
 * 
 * @cname("__pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type")
 * cdef object __pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type(vector[X]& v):             # <<<<<<<<<<<<<<
 *     return [v[i] for i in range(v.size())]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_enum____parquet_3a__3a_Encoding_3a__3a_type", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "map.to_py":201
 * 
 * @cname("__pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string")
 * cdef object __pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string(const map[X,Y]& s):             # <<<<<<<<<<<<<<
 *     o = {}
 *     cdef const map[X,Y].value_type *key_value
 */

static PyObject *__pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string(std::unordered_map<std::string,std::string>  const &__pyx_v_s) {
  PyObject *__pyx_v_o = NULL;
  std::unordered_map<std::string,std::string> ::value_type const *__pyx_v_key_value;
  std::unordered_map<std::string,std::string> ::const_iterator __pyx_v_iter;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string", 0);

  /* "map.to_py":202
 * @cname("__pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string")
 * cdef object __pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string(const map[X,Y]& s):
 *     o = {}             # <<<<<<<<<<<<<<
 *     cdef const map[X,Y].value_type *key_value
 *     cdef map[X,Y].const_iterator iter = s.begin()
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_o = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "map.to_py":204
 *     o = {}
 *     cdef const map[X,Y].value_type *key_value
 *     cdef map[X,Y].const_iterator iter = s.begin()             # <<<<<<<<<<<<<<
 *     while iter != s.end():
 *         key_value = &cython.operator.dereference(iter)
 */
  __pyx_v_iter = __pyx_v_s.begin();

  /* "map.to_py":205
 *     cdef const map[X,Y].value_type *key_value
 *     cdef map[X,Y].const_iterator iter = s.begin()
 *     while iter != s.end():             # <<<<<<<<<<<<<<
 *         key_value = &cython.operator.dereference(iter)
 *         o[key_value.first] = key_value.second
 */
  while (1) {
    __pyx_t_2 = ((__pyx_v_iter != __pyx_v_s.end()) != 0);
    if (!__pyx_t_2) break;

    /* "map.to_py":206
 *     cdef map[X,Y].const_iterator iter = s.begin()
 *     while iter != s.end():
 *         key_value = &cython.operator.dereference(iter)             # <<<<<<<<<<<<<<
 *         o[key_value.first] = key_value.second
 *         cython.operator.preincrement(iter)
 */
    __pyx_v_key_value = (&(*__pyx_v_iter));

    /* "map.to_py":207
 *     while iter != s.end():
 *         key_value = &cython.operator.dereference(iter)
 *         o[key_value.first] = key_value.second             # <<<<<<<<<<<<<<
 *         cython.operator.preincrement(iter)
 *     return o
 */
    __pyx_t_1 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_key_value->second); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 207, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_key_value->first); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 207, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (unlikely(PyDict_SetItem(__pyx_v_o, __pyx_t_3, __pyx_t_1) < 0)) __PYX_ERR(1, 207, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "map.to_py":208
 *         key_value = &cython.operator.dereference(iter)
 *         o[key_value.first] = key_value.second
 *         cython.operator.preincrement(iter)             # <<<<<<<<<<<<<<
 *     return o
 * 
 */
    (void)((++__pyx_v_iter));
  }

  /* "map.to_py":209
 *         o[key_value.first] = key_value.second
 *         cython.operator.preincrement(iter)
 *     return o             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "map.to_py":201
 * 
 * @cname("__pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string")
 * cdef object __pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string(const map[X,Y]& s):             # <<<<<<<<<<<<<<
 *     o = {}
 *     cdef const map[X,Y].value_type *key_value
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("map.to_py.__pyx_convert_unordered_map_to_py_std_3a__3a_string____std_3a__3a_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "string.from_py":13
 * 
 * @cname("__pyx_convert_string_from_py_std__in_string")
 * cdef string __pyx_convert_string_from_py_std__in_string(object o) except *:             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t length = 0
 *     cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)
 */

static std::string __pyx_convert_string_from_py_std__in_string(PyObject *__pyx_v_o) {
  Py_ssize_t __pyx_v_length;
  char const *__pyx_v_data;
  std::string __pyx_r;
  __Pyx_RefNannyDeclarations
  char const *__pyx_t_1;
  __Pyx_RefNannySetupContext("__pyx_convert_string_from_py_std__in_string", 0);

  /* "string.from_py":14
 * @cname("__pyx_convert_string_from_py_std__in_string")
 * cdef string __pyx_convert_string_from_py_std__in_string(object o) except *:
 *     cdef Py_ssize_t length = 0             # <<<<<<<<<<<<<<
 *     cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)
 *     return string(data, length)
 */
  __pyx_v_length = 0;

  /* "string.from_py":15
 * cdef string __pyx_convert_string_from_py_std__in_string(object o) except *:
 *     cdef Py_ssize_t length = 0
 *     cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)             # <<<<<<<<<<<<<<
 *     return string(data, length)
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_AsStringAndSize(__pyx_v_o, (&__pyx_v_length)); if (unlikely(__pyx_t_1 == ((char const *)NULL))) __PYX_ERR(1, 15, __pyx_L1_error)
  __pyx_v_data = __pyx_t_1;

  /* "string.from_py":16
 *     cdef Py_ssize_t length = 0
 *     cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)
 *     return string(data, length)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = std::string(__pyx_v_data, __pyx_v_length);
  goto __pyx_L0;

  /* "string.from_py":13
 * 
 * @cname("__pyx_convert_string_from_py_std__in_string")
 * cdef string __pyx_convert_string_from_py_std__in_string(object o) except *:             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t length = 0
 *     cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("string.from_py.__pyx_convert_string_from_py_std__in_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static struct __pyx_vtabstruct_7pyarrow_8_parquet_Statistics __pyx_vtable_7pyarrow_8_parquet_Statistics;

static PyObject *__pyx_tp_new_7pyarrow_8_parquet_Statistics(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_Statistics *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 __pyx_obj_7pyarrow_8_parquet_Statistics *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_parquet_Statistics;
  new((void*)&(p->statistics)) std::shared_ptr< parquet::Statistics> ();
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_10Statistics_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_7pyarrow_8_parquet_Statistics(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_Statistics *p = (struct __pyx_obj_7pyarrow_8_parquet_Statistics *)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);
  __Pyx_call_destructor(p->statistics);
  Py_CLEAR(p->parent);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_Statistics(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_Statistics *p = (struct __pyx_obj_7pyarrow_8_parquet_Statistics *)o;
  if (p->parent) {
    e = (*v)(((PyObject *)p->parent), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_Statistics(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_Statistics *p = (struct __pyx_obj_7pyarrow_8_parquet_Statistics *)o;
  tmp = ((PyObject*)p->parent);
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_richcompare_7pyarrow_8_parquet_Statistics(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_7pyarrow_8_parquet_10Statistics_7__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_7pyarrow_8_parquet_10Statistics_7__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_has_min_max(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_11has_min_max_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_min_raw(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_7min_raw_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_max_raw(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_7max_raw_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_min(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_3min_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_max(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_3max_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_null_count(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_10null_count_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_distinct_count(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_14distinct_count_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_num_values(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_10num_values_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_physical_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_13physical_type_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_logical_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_12logical_type_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_10Statistics_converted_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_10Statistics_14converted_type_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_Statistics[] = {
  {"to_dict", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_10Statistics_5to_dict, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_10Statistics_4to_dict},
  {"equals", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_10Statistics_9equals, METH_O, __pyx_doc_7pyarrow_8_parquet_10Statistics_8equals},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_10Statistics_11__reduce_cython__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_10Statistics_10__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_10Statistics_13__setstate_cython__, METH_O, __pyx_doc_7pyarrow_8_parquet_10Statistics_12__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_Statistics[] = {
  {(char *)"has_min_max", __pyx_getprop_7pyarrow_8_parquet_10Statistics_has_min_max, 0, (char *)0, 0},
  {(char *)"min_raw", __pyx_getprop_7pyarrow_8_parquet_10Statistics_min_raw, 0, (char *)0, 0},
  {(char *)"max_raw", __pyx_getprop_7pyarrow_8_parquet_10Statistics_max_raw, 0, (char *)0, 0},
  {(char *)"min", __pyx_getprop_7pyarrow_8_parquet_10Statistics_min, 0, (char *)0, 0},
  {(char *)"max", __pyx_getprop_7pyarrow_8_parquet_10Statistics_max, 0, (char *)0, 0},
  {(char *)"null_count", __pyx_getprop_7pyarrow_8_parquet_10Statistics_null_count, 0, (char *)0, 0},
  {(char *)"distinct_count", __pyx_getprop_7pyarrow_8_parquet_10Statistics_distinct_count, 0, (char *)0, 0},
  {(char *)"num_values", __pyx_getprop_7pyarrow_8_parquet_10Statistics_num_values, 0, (char *)0, 0},
  {(char *)"physical_type", __pyx_getprop_7pyarrow_8_parquet_10Statistics_physical_type, 0, (char *)0, 0},
  {(char *)"logical_type", __pyx_getprop_7pyarrow_8_parquet_10Statistics_logical_type, 0, (char *)0, 0},
  {(char *)"converted_type", __pyx_getprop_7pyarrow_8_parquet_10Statistics_converted_type, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_Statistics = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.Statistics", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_Statistics), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_Statistics, /*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
  __pyx_pw_7pyarrow_8_parquet_10Statistics_3__repr__, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_Statistics, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_Statistics, /*tp_clear*/
  __pyx_tp_richcompare_7pyarrow_8_parquet_Statistics, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_Statistics, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_Statistics, /*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_7pyarrow_8_parquet_Statistics, /*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_7pyarrow_8_parquet_ParquetLogicalType __pyx_vtable_7pyarrow_8_parquet_ParquetLogicalType;

static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ParquetLogicalType(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *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 __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_parquet_ParquetLogicalType;
  new((void*)&(p->type)) std::shared_ptr< parquet::LogicalType const > ();
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_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_7pyarrow_8_parquet_ParquetLogicalType(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *)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
  __Pyx_call_destructor(p->type);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_18ParquetLogicalType_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_4type_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_ParquetLogicalType[] = {
  {"to_json", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_5to_json, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_18ParquetLogicalType_4to_json},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_7__reduce_cython__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_18ParquetLogicalType_6__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_9__setstate_cython__, METH_O, __pyx_doc_7pyarrow_8_parquet_18ParquetLogicalType_8__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_ParquetLogicalType[] = {
  {(char *)"type", __pyx_getprop_7pyarrow_8_parquet_18ParquetLogicalType_type, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_ParquetLogicalType = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.ParquetLogicalType", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_ParquetLogicalType, /*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*/
  __pyx_pw_7pyarrow_8_parquet_18ParquetLogicalType_3__str__, /*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*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_ParquetLogicalType, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_ParquetLogicalType, /*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_7pyarrow_8_parquet_ParquetLogicalType, /*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_7pyarrow_8_parquet_ColumnChunkMetaData __pyx_vtable_7pyarrow_8_parquet_ColumnChunkMetaData;

static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ColumnChunkMetaData(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *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 __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_parquet_ColumnChunkMetaData;
  new((void*)&(p->up_metadata)) std::unique_ptr< parquet::ColumnChunkMetaData> ();
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_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_7pyarrow_8_parquet_ColumnChunkMetaData(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)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);
  __Pyx_call_destructor(p->up_metadata);
  Py_CLEAR(p->parent);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_ColumnChunkMetaData(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)o;
  if (p->parent) {
    e = (*v)(((PyObject *)p->parent), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_ColumnChunkMetaData(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *)o;
  tmp = ((PyObject*)p->parent);
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_richcompare_7pyarrow_8_parquet_ColumnChunkMetaData(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_7__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_7__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_file_offset(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11file_offset_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_file_path(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9file_path_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_physical_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_13physical_type_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_num_values(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_10num_values_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_path_in_schema(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_14path_in_schema_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_is_stats_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_12is_stats_set_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_statistics(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_10statistics_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_compression(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11compression_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_encodings(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9encodings_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_has_dictionary_page(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_19has_dictionary_page_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_dictionary_page_offset(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_22dictionary_page_offset_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_data_page_offset(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_16data_page_offset_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_has_index_page(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_14has_index_page_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_index_page_offset(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_17index_page_offset_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_total_compressed_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_21total_compressed_size_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_total_uncompressed_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_23total_uncompressed_size_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_ColumnChunkMetaData[] = {
  {"to_dict", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_5to_dict, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_4to_dict},
  {"equals", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_9equals, METH_O, __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_8equals},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_11__reduce_cython__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_10__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_13__setstate_cython__, METH_O, __pyx_doc_7pyarrow_8_parquet_19ColumnChunkMetaData_12__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_ColumnChunkMetaData[] = {
  {(char *)"file_offset", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_file_offset, 0, (char *)0, 0},
  {(char *)"file_path", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_file_path, 0, (char *)0, 0},
  {(char *)"physical_type", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_physical_type, 0, (char *)0, 0},
  {(char *)"num_values", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_num_values, 0, (char *)0, 0},
  {(char *)"path_in_schema", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_path_in_schema, 0, (char *)0, 0},
  {(char *)"is_stats_set", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_is_stats_set, 0, (char *)0, 0},
  {(char *)"statistics", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_statistics, 0, (char *)0, 0},
  {(char *)"compression", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_compression, 0, (char *)0, 0},
  {(char *)"encodings", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_encodings, 0, (char *)0, 0},
  {(char *)"has_dictionary_page", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_has_dictionary_page, 0, (char *)0, 0},
  {(char *)"dictionary_page_offset", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_dictionary_page_offset, 0, (char *)0, 0},
  {(char *)"data_page_offset", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_data_page_offset, 0, (char *)0, 0},
  {(char *)"has_index_page", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_has_index_page, 0, (char *)0, 0},
  {(char *)"index_page_offset", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_index_page_offset, 0, (char *)0, 0},
  {(char *)"total_compressed_size", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_total_compressed_size, 0, (char *)0, 0},
  {(char *)"total_uncompressed_size", __pyx_getprop_7pyarrow_8_parquet_19ColumnChunkMetaData_total_uncompressed_size, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.ColumnChunkMetaData", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_ColumnChunkMetaData, /*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
  __pyx_pw_7pyarrow_8_parquet_19ColumnChunkMetaData_3__repr__, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_ColumnChunkMetaData, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_ColumnChunkMetaData, /*tp_clear*/
  __pyx_tp_richcompare_7pyarrow_8_parquet_ColumnChunkMetaData, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_ColumnChunkMetaData, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_ColumnChunkMetaData, /*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_7pyarrow_8_parquet_ColumnChunkMetaData, /*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_7pyarrow_8_parquet_RowGroupMetaData(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *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 __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)o);
  new((void*)&(p->up_metadata)) std::unique_ptr< parquet::RowGroupMetaData> ();
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_7pyarrow_8_parquet_RowGroupMetaData(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)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);
  __Pyx_call_destructor(p->up_metadata);
  Py_CLEAR(p->parent);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_RowGroupMetaData(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)o;
  if (p->parent) {
    e = (*v)(((PyObject *)p->parent), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_RowGroupMetaData(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *)o;
  tmp = ((PyObject*)p->parent);
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_richcompare_7pyarrow_8_parquet_RowGroupMetaData(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_5__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_5__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_16RowGroupMetaData_num_columns(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_11num_columns_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_16RowGroupMetaData_num_rows(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_8num_rows_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_16RowGroupMetaData_total_byte_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_15total_byte_size_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_RowGroupMetaData[] = {
  {"__reduce__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_3__reduce__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_2__reduce__},
  {"equals", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_7equals, METH_O, __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_6equals},
  {"column", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_9column, METH_O, __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_8column},
  {"to_dict", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_13to_dict, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_16RowGroupMetaData_12to_dict},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_RowGroupMetaData[] = {
  {(char *)"num_columns", __pyx_getprop_7pyarrow_8_parquet_16RowGroupMetaData_num_columns, 0, (char *)0, 0},
  {(char *)"num_rows", __pyx_getprop_7pyarrow_8_parquet_16RowGroupMetaData_num_rows, 0, (char *)0, 0},
  {(char *)"total_byte_size", __pyx_getprop_7pyarrow_8_parquet_16RowGroupMetaData_total_byte_size, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_RowGroupMetaData = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.RowGroupMetaData", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_RowGroupMetaData, /*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
  __pyx_pw_7pyarrow_8_parquet_16RowGroupMetaData_11__repr__, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_RowGroupMetaData, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_RowGroupMetaData, /*tp_clear*/
  __pyx_tp_richcompare_7pyarrow_8_parquet_RowGroupMetaData, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_RowGroupMetaData, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_RowGroupMetaData, /*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_7pyarrow_8_parquet_RowGroupMetaData, /*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_7pyarrow_8_parquet_FileMetaData __pyx_vtable_7pyarrow_8_parquet_FileMetaData;

static PyObject *__pyx_tp_new_7pyarrow_8_parquet_FileMetaData(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *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 __pyx_obj_7pyarrow_8_parquet_FileMetaData *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_parquet_FileMetaData;
  new((void*)&(p->sp_metadata)) std::shared_ptr< parquet::FileMetaData> ();
  p->_schema = ((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_12FileMetaData_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_7pyarrow_8_parquet_FileMetaData(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)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);
  __Pyx_call_destructor(p->sp_metadata);
  Py_CLEAR(p->_schema);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_FileMetaData(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)o;
  if (p->_schema) {
    e = (*v)(((PyObject *)p->_schema), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_FileMetaData(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *p = (struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)o;
  tmp = ((PyObject*)p->_schema);
  p->_schema = ((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_richcompare_7pyarrow_8_parquet_FileMetaData(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_9__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_7pyarrow_8_parquet_12FileMetaData_9__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_schema(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_6schema_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_serialized_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_15serialized_size_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_num_columns(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_11num_columns_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_num_rows(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_8num_rows_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_num_row_groups(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_14num_row_groups_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_format_version(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_14format_version_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_created_by(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_10created_by_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12FileMetaData_metadata(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12FileMetaData_8metadata_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_FileMetaData[] = {
  {"__reduce__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12FileMetaData_3__reduce__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_12FileMetaData_2__reduce__},
  {"to_dict", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12FileMetaData_7to_dict, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_12FileMetaData_6to_dict},
  {"equals", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12FileMetaData_11equals, METH_O, __pyx_doc_7pyarrow_8_parquet_12FileMetaData_10equals},
  {"row_group", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12FileMetaData_13row_group, METH_O, __pyx_doc_7pyarrow_8_parquet_12FileMetaData_12row_group},
  {"set_file_path", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12FileMetaData_15set_file_path, METH_O, __pyx_doc_7pyarrow_8_parquet_12FileMetaData_14set_file_path},
  {"append_row_groups", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12FileMetaData_17append_row_groups, METH_O, __pyx_doc_7pyarrow_8_parquet_12FileMetaData_16append_row_groups},
  {"write_metadata_file", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12FileMetaData_19write_metadata_file, METH_O, __pyx_doc_7pyarrow_8_parquet_12FileMetaData_18write_metadata_file},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_FileMetaData[] = {
  {(char *)"schema", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_schema, 0, (char *)0, 0},
  {(char *)"serialized_size", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_serialized_size, 0, (char *)0, 0},
  {(char *)"num_columns", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_num_columns, 0, (char *)0, 0},
  {(char *)"num_rows", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_num_rows, 0, (char *)0, 0},
  {(char *)"num_row_groups", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_num_row_groups, 0, (char *)0, 0},
  {(char *)"format_version", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_format_version, 0, (char *)0, 0},
  {(char *)"created_by", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_created_by, 0, (char *)0, 0},
  {(char *)"metadata", __pyx_getprop_7pyarrow_8_parquet_12FileMetaData_metadata, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_FileMetaData = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.FileMetaData", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_FileMetaData, /*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
  __pyx_pw_7pyarrow_8_parquet_12FileMetaData_5__repr__, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_FileMetaData, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_FileMetaData, /*tp_clear*/
  __pyx_tp_richcompare_7pyarrow_8_parquet_FileMetaData, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_FileMetaData, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_FileMetaData, /*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_7pyarrow_8_parquet_FileMetaData, /*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_7pyarrow_8_parquet_ParquetSchema(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *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 __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)o);
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_7pyarrow_8_parquet_ParquetSchema(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)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);
  Py_CLEAR(p->parent);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_ParquetSchema(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)o;
  if (p->parent) {
    e = (*v)(((PyObject *)p->parent), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_ParquetSchema(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)o;
  tmp = ((PyObject*)p->parent);
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}
static PyObject *__pyx_sq_item_7pyarrow_8_parquet_ParquetSchema(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 PyObject *__pyx_tp_richcompare_7pyarrow_8_parquet_ParquetSchema(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_13__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_13__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetSchema_names(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_5names_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_ParquetSchema[] = {
  {"__reduce__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_5__reduce__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_4__reduce__},
  {"to_arrow_schema", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_11to_arrow_schema, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_10to_arrow_schema},
  {"equals", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_15equals, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_14equals},
  {"column", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetSchema_17column, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetSchema_16column},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_ParquetSchema[] = {
  {(char *)"names", __pyx_getprop_7pyarrow_8_parquet_13ParquetSchema_names, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PySequenceMethods __pyx_tp_as_sequence_ParquetSchema = {
  __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_7__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_7pyarrow_8_parquet_ParquetSchema, /*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_ParquetSchema = {
  __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_7__len__, /*mp_length*/
  __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_9__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_ParquetSchema = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.ParquetSchema", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_ParquetSchema, /*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
  __pyx_pw_7pyarrow_8_parquet_13ParquetSchema_3__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  &__pyx_tp_as_sequence_ParquetSchema, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ParquetSchema, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_ParquetSchema, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_ParquetSchema, /*tp_clear*/
  __pyx_tp_richcompare_7pyarrow_8_parquet_ParquetSchema, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_ParquetSchema, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_ParquetSchema, /*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_7pyarrow_8_parquet_ParquetSchema, /*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_7pyarrow_8_parquet_ColumnSchema(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *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 __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)o);
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_7pyarrow_8_parquet_ColumnSchema(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *p = (struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)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);
  Py_CLEAR(p->parent);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_ColumnSchema(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *p = (struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)o;
  if (p->parent) {
    e = (*v)(((PyObject *)p->parent), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_ColumnSchema(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *p = (struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema *)o;
  tmp = ((PyObject*)p->parent);
  p->parent = ((struct __pyx_obj_7pyarrow_8_parquet_ParquetSchema *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_richcompare_7pyarrow_8_parquet_ColumnSchema(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_3__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_3__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret); Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_4name_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_path(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_4path_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_max_definition_level(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_20max_definition_level_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_max_repetition_level(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_20max_repetition_level_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_physical_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_13physical_type_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_logical_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_12logical_type_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_converted_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_14converted_type_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_length(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_6length_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_precision(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_9precision_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_scale(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_5scale_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_ColumnSchema[] = {
  {"__reduce__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_5__reduce__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_12ColumnSchema_4__reduce__},
  {"equals", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_12ColumnSchema_7equals, METH_O, __pyx_doc_7pyarrow_8_parquet_12ColumnSchema_6equals},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_ColumnSchema[] = {
  {(char *)"name", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_name, 0, (char *)0, 0},
  {(char *)"path", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_path, 0, (char *)0, 0},
  {(char *)"max_definition_level", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_max_definition_level, 0, (char *)0, 0},
  {(char *)"max_repetition_level", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_max_repetition_level, 0, (char *)0, 0},
  {(char *)"physical_type", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_physical_type, 0, (char *)0, 0},
  {(char *)"logical_type", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_logical_type, 0, (char *)0, 0},
  {(char *)"converted_type", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_converted_type, 0, (char *)0, 0},
  {(char *)"length", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_length, 0, (char *)0, 0},
  {(char *)"precision", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_precision, 0, (char *)0, 0},
  {(char *)"scale", __pyx_getprop_7pyarrow_8_parquet_12ColumnSchema_scale, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_ColumnSchema = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.ColumnSchema", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_ColumnSchema), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_ColumnSchema, /*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
  __pyx_pw_7pyarrow_8_parquet_12ColumnSchema_9__repr__, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_ColumnSchema, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_ColumnSchema, /*tp_clear*/
  __pyx_tp_richcompare_7pyarrow_8_parquet_ColumnSchema, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_ColumnSchema, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_ColumnSchema, /*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_7pyarrow_8_parquet_ColumnSchema, /*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_7pyarrow_8_parquet_ParquetReader __pyx_vtable_7pyarrow_8_parquet_ParquetReader;

static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ParquetReader(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *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 __pyx_obj_7pyarrow_8_parquet_ParquetReader *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_parquet_ParquetReader;
  new((void*)&(p->reader)) std::unique_ptr<parquet::arrow::FileReader> ();
  p->source = Py_None; Py_INCREF(Py_None);
  p->_metadata = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)Py_None); Py_INCREF(Py_None);
  p->_column_idx_map = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_13ParquetReader_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_7pyarrow_8_parquet_ParquetReader(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)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);
  __Pyx_call_destructor(p->reader);
  Py_CLEAR(p->source);
  Py_CLEAR(p->_metadata);
  Py_CLEAR(p->_column_idx_map);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_ParquetReader(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)o;
  if (p->source) {
    e = (*v)(p->source, a); if (e) return e;
  }
  if (p->_metadata) {
    e = (*v)(((PyObject *)p->_metadata), a); if (e) return e;
  }
  if (p->_column_idx_map) {
    e = (*v)(p->_column_idx_map, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_ParquetReader(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *)o;
  tmp = ((PyObject*)p->source);
  p->source = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_metadata);
  p->_metadata = ((struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_column_idx_map);
  p->_column_idx_map = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetReader_column_paths(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetReader_12column_paths_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetReader_metadata(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetReader_8metadata_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetReader_num_row_groups(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetReader_14num_row_groups_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetReader__column_idx_map(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_1__get__(o);
}

static int __pyx_setprop_7pyarrow_8_parquet_13ParquetReader__column_idx_map(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_3__set__(o, v);
  }
  else {
    return __pyx_pw_7pyarrow_8_parquet_13ParquetReader_15_column_idx_map_5__del__(o);
  }
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_ParquetReader[] = {
  {"open", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_3open, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_2open},
  {"set_use_threads", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_5set_use_threads, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_4set_use_threads},
  {"read_row_group", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_7read_row_group, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_6read_row_group},
  {"read_row_groups", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_9read_row_groups, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_8read_row_groups},
  {"read_all", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_11read_all, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_10read_all},
  {"scan_contents", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_13scan_contents, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_12scan_contents},
  {"column_name_idx", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_15column_name_idx, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_14column_name_idx},
  {"read_column", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_17read_column, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_16read_column},
  {"read_schema_field", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_19read_schema_field, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_18read_schema_field},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_21__reduce_cython__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_20__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetReader_23__setstate_cython__, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetReader_22__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_ParquetReader[] = {
  {(char *)"column_paths", __pyx_getprop_7pyarrow_8_parquet_13ParquetReader_column_paths, 0, (char *)0, 0},
  {(char *)"metadata", __pyx_getprop_7pyarrow_8_parquet_13ParquetReader_metadata, 0, (char *)0, 0},
  {(char *)"num_row_groups", __pyx_getprop_7pyarrow_8_parquet_13ParquetReader_num_row_groups, 0, (char *)0, 0},
  {(char *)"_column_idx_map", __pyx_getprop_7pyarrow_8_parquet_13ParquetReader__column_idx_map, __pyx_setprop_7pyarrow_8_parquet_13ParquetReader__column_idx_map, (char *)"_column_idx_map: object", 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_ParquetReader = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.ParquetReader", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_ParquetReader, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_ParquetReader, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_ParquetReader, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_ParquetReader, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_ParquetReader, /*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_7pyarrow_8_parquet_ParquetReader, /*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_7pyarrow_8_parquet_ParquetWriter __pyx_vtable_7pyarrow_8_parquet_ParquetWriter;

static PyObject *__pyx_tp_new_7pyarrow_8_parquet_ParquetWriter(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *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 __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_parquet_ParquetWriter;
  new((void*)&(p->writer)) std::unique_ptr<parquet::arrow::FileWriter> ();
  new((void*)&(p->sink)) std::shared_ptr<arrow::io::OutputStream> ();
  p->use_dictionary = Py_None; Py_INCREF(Py_None);
  p->use_deprecated_int96_timestamps = Py_None; Py_INCREF(Py_None);
  p->coerce_timestamps = Py_None; Py_INCREF(Py_None);
  p->allow_truncated_timestamps = Py_None; Py_INCREF(Py_None);
  p->compression = Py_None; Py_INCREF(Py_None);
  p->compression_level = Py_None; Py_INCREF(Py_None);
  p->version = Py_None; Py_INCREF(Py_None);
  p->write_statistics = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_7pyarrow_8_parquet_ParquetWriter(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)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);
  __Pyx_call_destructor(p->writer);
  __Pyx_call_destructor(p->sink);
  Py_CLEAR(p->use_dictionary);
  Py_CLEAR(p->use_deprecated_int96_timestamps);
  Py_CLEAR(p->coerce_timestamps);
  Py_CLEAR(p->allow_truncated_timestamps);
  Py_CLEAR(p->compression);
  Py_CLEAR(p->compression_level);
  Py_CLEAR(p->version);
  Py_CLEAR(p->write_statistics);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_7pyarrow_8_parquet_ParquetWriter(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)o;
  if (p->use_dictionary) {
    e = (*v)(p->use_dictionary, a); if (e) return e;
  }
  if (p->use_deprecated_int96_timestamps) {
    e = (*v)(p->use_deprecated_int96_timestamps, a); if (e) return e;
  }
  if (p->coerce_timestamps) {
    e = (*v)(p->coerce_timestamps, a); if (e) return e;
  }
  if (p->allow_truncated_timestamps) {
    e = (*v)(p->allow_truncated_timestamps, a); if (e) return e;
  }
  if (p->compression) {
    e = (*v)(p->compression, a); if (e) return e;
  }
  if (p->compression_level) {
    e = (*v)(p->compression_level, a); if (e) return e;
  }
  if (p->version) {
    e = (*v)(p->version, a); if (e) return e;
  }
  if (p->write_statistics) {
    e = (*v)(p->write_statistics, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7pyarrow_8_parquet_ParquetWriter(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *p = (struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *)o;
  tmp = ((PyObject*)p->use_dictionary);
  p->use_dictionary = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->use_deprecated_int96_timestamps);
  p->use_deprecated_int96_timestamps = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->coerce_timestamps);
  p->coerce_timestamps = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->allow_truncated_timestamps);
  p->allow_truncated_timestamps = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->compression);
  p->compression = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->compression_level);
  p->compression_level = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->version);
  p->version = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->write_statistics);
  p->write_statistics = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_metadata(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_8metadata_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_use_dictionary(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14use_dictionary_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_use_deprecated_int96_timestamps(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_31use_deprecated_int96_timestamps_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_coerce_timestamps(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_17coerce_timestamps_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_allow_truncated_timestamps(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_26allow_truncated_timestamps_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_compression(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_11compression_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_compression_level(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_17compression_level_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_version(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_7version_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_write_statistics(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_16write_statistics_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_row_group_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14row_group_size_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_data_page_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_parquet_13ParquetWriter_14data_page_size_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_parquet_ParquetWriter[] = {
  {"close", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_3close, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_2close},
  {"write_table", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_5write_table, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_4write_table},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_7__reduce_cython__, METH_NOARGS, __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_6__reduce_cython__},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_parquet_13ParquetWriter_9__setstate_cython__, METH_O, __pyx_doc_7pyarrow_8_parquet_13ParquetWriter_8__setstate_cython__},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_parquet_ParquetWriter[] = {
  {(char *)"metadata", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_metadata, 0, (char *)0, 0},
  {(char *)"use_dictionary", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_use_dictionary, 0, (char *)0, 0},
  {(char *)"use_deprecated_int96_timestamps", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_use_deprecated_int96_timestamps, 0, (char *)0, 0},
  {(char *)"coerce_timestamps", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_coerce_timestamps, 0, (char *)0, 0},
  {(char *)"allow_truncated_timestamps", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_allow_truncated_timestamps, 0, (char *)0, 0},
  {(char *)"compression", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_compression, 0, (char *)0, 0},
  {(char *)"compression_level", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_compression_level, 0, (char *)0, 0},
  {(char *)"version", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_version, 0, (char *)0, 0},
  {(char *)"write_statistics", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_write_statistics, 0, (char *)0, 0},
  {(char *)"row_group_size", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_row_group_size, 0, (char *)0, 0},
  {(char *)"data_page_size", __pyx_getprop_7pyarrow_8_parquet_13ParquetWriter_data_page_size, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_parquet_ParquetWriter = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.ParquetWriter", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_parquet_ParquetWriter, /*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*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_parquet_ParquetWriter, /*tp_traverse*/
  __pyx_tp_clear_7pyarrow_8_parquet_ParquetWriter, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_parquet_ParquetWriter, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_parquet_ParquetWriter, /*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_7pyarrow_8_parquet_ParquetWriter, /*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_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *__pyx_freelist___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py[8];
static int __pyx_freecount___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py = 0;

static PyObject *__pyx_tp_new___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py)))) {
    o = (PyObject*)__pyx_freelist___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py[--__pyx_freecount___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py];
    memset(o, 0, sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py));
    (void) PyObject_INIT(o, t);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py(PyObject *o) {
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py)))) {
    __pyx_freelist___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py[__pyx_freecount___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py++] = ((struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static PyTypeObject __pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._parquet.__pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py", /*tp_name*/
  sizeof(struct __pyx_obj___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py, /*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*/
  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___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py, /*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__parquet(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec__parquet},
  {0, NULL}
};
#endif

static struct PyModuleDef __pyx_moduledef = {
    PyModuleDef_HEAD_INIT,
    "_parquet",
    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 */
    NULL /* 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_kp_u_0, __pyx_k_0, sizeof(__pyx_k_0), 0, 1, 0, 0},
  {&__pyx_kp_u_0_1, __pyx_k_0_1, sizeof(__pyx_k_0_1), 0, 1, 0, 0},
  {&__pyx_kp_u_0_1_2, __pyx_k_0_1_2, sizeof(__pyx_k_0_1_2), 0, 1, 0, 0},
  {&__pyx_kp_u_0_created_by_1_num_columns_2_nu, __pyx_k_0_created_by_1_num_columns_2_nu, sizeof(__pyx_k_0_created_by_1_num_columns_2_nu), 0, 1, 0, 0},
  {&__pyx_kp_u_0_file_offset_1_file_path_2_phy, __pyx_k_0_file_offset_1_file_path_2_phy, sizeof(__pyx_k_0_file_offset_1_file_path_2_phy), 0, 1, 0, 0},
  {&__pyx_kp_u_0_num_columns_1_num_rows_2_tota, __pyx_k_0_num_columns_1_num_rows_2_tota, sizeof(__pyx_k_0_num_columns_1_num_rows_2_tota), 0, 1, 0, 0},
  {&__pyx_kp_u_0_out_of_bounds, __pyx_k_0_out_of_bounds, sizeof(__pyx_k_0_out_of_bounds), 0, 1, 0, 0},
  {&__pyx_kp_u_1_0, __pyx_k_1_0, sizeof(__pyx_k_1_0), 0, 1, 0, 0},
  {&__pyx_kp_u_2_0, __pyx_k_2_0, sizeof(__pyx_k_2_0), 0, 1, 0, 0},
  {&__pyx_n_s_ArrowException, __pyx_k_ArrowException, sizeof(__pyx_k_ArrowException), 0, 0, 1, 1},
  {&__pyx_n_u_BIT_PACKED, __pyx_k_BIT_PACKED, sizeof(__pyx_k_BIT_PACKED), 0, 1, 0, 1},
  {&__pyx_n_u_BOOLEAN, __pyx_k_BOOLEAN, sizeof(__pyx_k_BOOLEAN), 0, 1, 0, 1},
  {&__pyx_n_u_BROTLI, __pyx_k_BROTLI, sizeof(__pyx_k_BROTLI), 0, 1, 0, 1},
  {&__pyx_n_u_BSON, __pyx_k_BSON, sizeof(__pyx_k_BSON), 0, 1, 0, 1},
  {&__pyx_n_u_BYTE_ARRAY, __pyx_k_BYTE_ARRAY, sizeof(__pyx_k_BYTE_ARRAY), 0, 1, 0, 1},
  {&__pyx_n_s_BufferOutputStream, __pyx_k_BufferOutputStream, sizeof(__pyx_k_BufferOutputStream), 0, 0, 1, 1},
  {&__pyx_kp_u_Buffer_size_must_be_larger_than, __pyx_k_Buffer_size_must_be_larger_than, sizeof(__pyx_k_Buffer_size_must_be_larger_than), 0, 1, 0, 0},
  {&__pyx_n_s_ColumnChunkMetaData, __pyx_k_ColumnChunkMetaData, sizeof(__pyx_k_ColumnChunkMetaData), 0, 0, 1, 1},
  {&__pyx_n_s_ColumnSchema, __pyx_k_ColumnSchema, sizeof(__pyx_k_ColumnSchema), 0, 0, 1, 1},
  {&__pyx_n_u_DATE, __pyx_k_DATE, sizeof(__pyx_k_DATE), 0, 1, 0, 1},
  {&__pyx_n_u_DECIMAL, __pyx_k_DECIMAL, sizeof(__pyx_k_DECIMAL), 0, 1, 0, 1},
  {&__pyx_kp_u_DECIMAL_0_1, __pyx_k_DECIMAL_0_1, sizeof(__pyx_k_DECIMAL_0_1), 0, 1, 0, 0},
  {&__pyx_n_u_DELTA_BINARY_PACKED, __pyx_k_DELTA_BINARY_PACKED, sizeof(__pyx_k_DELTA_BINARY_PACKED), 0, 1, 0, 1},
  {&__pyx_n_u_DELTA_BYTE_ARRAY, __pyx_k_DELTA_BYTE_ARRAY, sizeof(__pyx_k_DELTA_BYTE_ARRAY), 0, 1, 0, 1},
  {&__pyx_n_u_DELTA_LENGTH_BYTE_ARRAY, __pyx_k_DELTA_LENGTH_BYTE_ARRAY, sizeof(__pyx_k_DELTA_LENGTH_BYTE_ARRAY), 0, 1, 0, 1},
  {&__pyx_n_u_DOUBLE, __pyx_k_DOUBLE, sizeof(__pyx_k_DOUBLE), 0, 1, 0, 1},
  {&__pyx_n_u_ENUM, __pyx_k_ENUM, sizeof(__pyx_k_ENUM), 0, 1, 0, 1},
  {&__pyx_n_u_FIXED_LEN_BYTE_ARRAY, __pyx_k_FIXED_LEN_BYTE_ARRAY, sizeof(__pyx_k_FIXED_LEN_BYTE_ARRAY), 0, 1, 0, 1},
  {&__pyx_kp_u_FIXED_LEN_BYTE_ARRAY_length_0, __pyx_k_FIXED_LEN_BYTE_ARRAY_length_0, sizeof(__pyx_k_FIXED_LEN_BYTE_ARRAY_length_0), 0, 1, 0, 0},
  {&__pyx_n_u_FLOAT, __pyx_k_FLOAT, sizeof(__pyx_k_FLOAT), 0, 1, 0, 1},
  {&__pyx_n_s_FileMetaData, __pyx_k_FileMetaData, sizeof(__pyx_k_FileMetaData), 0, 0, 1, 1},
  {&__pyx_n_u_GZIP, __pyx_k_GZIP, sizeof(__pyx_k_GZIP), 0, 1, 0, 1},
  {&__pyx_n_u_INT, __pyx_k_INT, sizeof(__pyx_k_INT), 0, 1, 0, 1},
  {&__pyx_n_u_INT32, __pyx_k_INT32, sizeof(__pyx_k_INT32), 0, 1, 0, 1},
  {&__pyx_n_u_INT64, __pyx_k_INT64, sizeof(__pyx_k_INT64), 0, 1, 0, 1},
  {&__pyx_n_u_INT96, __pyx_k_INT96, sizeof(__pyx_k_INT96), 0, 1, 0, 1},
  {&__pyx_n_u_INTERVAL, __pyx_k_INTERVAL, sizeof(__pyx_k_INTERVAL), 0, 1, 0, 1},
  {&__pyx_n_u_INT_16, __pyx_k_INT_16, sizeof(__pyx_k_INT_16), 0, 1, 0, 1},
  {&__pyx_n_u_INT_32, __pyx_k_INT_32, sizeof(__pyx_k_INT_32), 0, 1, 0, 1},
  {&__pyx_n_u_INT_8, __pyx_k_INT_8, sizeof(__pyx_k_INT_8), 0, 1, 0, 1},
  {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
  {&__pyx_kp_u_Invalid_value_for_coerce_timesta, __pyx_k_Invalid_value_for_coerce_timesta, sizeof(__pyx_k_Invalid_value_for_coerce_timesta), 0, 1, 0, 0},
  {&__pyx_n_u_JSON, __pyx_k_JSON, sizeof(__pyx_k_JSON), 0, 1, 0, 1},
  {&__pyx_n_u_LIST, __pyx_k_LIST, sizeof(__pyx_k_LIST), 0, 1, 0, 1},
  {&__pyx_n_u_LZ4, __pyx_k_LZ4, sizeof(__pyx_k_LZ4), 0, 1, 0, 1},
  {&__pyx_n_u_LZO, __pyx_k_LZO, sizeof(__pyx_k_LZO), 0, 1, 0, 1},
  {&__pyx_n_u_MAP, __pyx_k_MAP, sizeof(__pyx_k_MAP), 0, 1, 0, 1},
  {&__pyx_n_u_MAP_KEY_VALUE, __pyx_k_MAP_KEY_VALUE, sizeof(__pyx_k_MAP_KEY_VALUE), 0, 1, 0, 1},
  {&__pyx_n_u_NONE, __pyx_k_NONE, sizeof(__pyx_k_NONE), 0, 1, 0, 1},
  {&__pyx_n_s_NativeFile, __pyx_k_NativeFile, sizeof(__pyx_k_NativeFile), 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_n_u_PLAIN, __pyx_k_PLAIN, sizeof(__pyx_k_PLAIN), 0, 1, 0, 1},
  {&__pyx_n_u_PLAIN_DICTIONARY, __pyx_k_PLAIN_DICTIONARY, sizeof(__pyx_k_PLAIN_DICTIONARY), 0, 1, 0, 1},
  {&__pyx_kp_u_ParquetColumnSchema_name_0_path, __pyx_k_ParquetColumnSchema_name_0_path, sizeof(__pyx_k_ParquetColumnSchema_name_0_path), 0, 1, 0, 0},
  {&__pyx_n_s_ParquetLogicalType, __pyx_k_ParquetLogicalType, sizeof(__pyx_k_ParquetLogicalType), 0, 0, 1, 1},
  {&__pyx_n_s_ParquetReader, __pyx_k_ParquetReader, sizeof(__pyx_k_ParquetReader), 0, 0, 1, 1},
  {&__pyx_n_s_ParquetSchema, __pyx_k_ParquetSchema, sizeof(__pyx_k_ParquetSchema), 0, 0, 1, 1},
  {&__pyx_n_s_ParquetWriter, __pyx_k_ParquetWriter, sizeof(__pyx_k_ParquetWriter), 0, 0, 1, 1},
  {&__pyx_n_s_Pyx_CFunc_object____ParquetEnc, __pyx_k_Pyx_CFunc_object____ParquetEnc, sizeof(__pyx_k_Pyx_CFunc_object____ParquetEnc), 0, 0, 1, 1},
  {&__pyx_n_u_RLE, __pyx_k_RLE, sizeof(__pyx_k_RLE), 0, 1, 0, 1},
  {&__pyx_n_u_RLE_DICTIONARY, __pyx_k_RLE_DICTIONARY, sizeof(__pyx_k_RLE_DICTIONARY), 0, 1, 0, 1},
  {&__pyx_n_s_RowGroupMetaData, __pyx_k_RowGroupMetaData, sizeof(__pyx_k_RowGroupMetaData), 0, 0, 1, 1},
  {&__pyx_kp_u_Row_group_size_cannot_be_0, __pyx_k_Row_group_size_cannot_be_0, sizeof(__pyx_k_Row_group_size_cannot_be_0), 0, 1, 0, 0},
  {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
  {&__pyx_n_u_SNAPPY, __pyx_k_SNAPPY, sizeof(__pyx_k_SNAPPY), 0, 1, 0, 1},
  {&__pyx_n_u_STRING, __pyx_k_STRING, sizeof(__pyx_k_STRING), 0, 1, 0, 1},
  {&__pyx_n_s_Statistics, __pyx_k_Statistics, sizeof(__pyx_k_Statistics), 0, 0, 1, 1},
  {&__pyx_n_u_TIME, __pyx_k_TIME, sizeof(__pyx_k_TIME), 0, 1, 0, 1},
  {&__pyx_n_u_TIMESTAMP, __pyx_k_TIMESTAMP, sizeof(__pyx_k_TIMESTAMP), 0, 1, 0, 1},
  {&__pyx_n_u_TIMESTAMP_MICROS, __pyx_k_TIMESTAMP_MICROS, sizeof(__pyx_k_TIMESTAMP_MICROS), 0, 1, 0, 1},
  {&__pyx_n_u_TIMESTAMP_MILLIS, __pyx_k_TIMESTAMP_MILLIS, sizeof(__pyx_k_TIMESTAMP_MILLIS), 0, 1, 0, 1},
  {&__pyx_n_u_TIME_MICROS, __pyx_k_TIME_MICROS, sizeof(__pyx_k_TIME_MICROS), 0, 1, 0, 1},
  {&__pyx_n_u_TIME_MILLIS, __pyx_k_TIME_MILLIS, sizeof(__pyx_k_TIME_MILLIS), 0, 1, 0, 1},
  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
  {&__pyx_n_u_UINT_16, __pyx_k_UINT_16, sizeof(__pyx_k_UINT_16), 0, 1, 0, 1},
  {&__pyx_n_u_UINT_32, __pyx_k_UINT_32, sizeof(__pyx_k_UINT_32), 0, 1, 0, 1},
  {&__pyx_n_u_UINT_64, __pyx_k_UINT_64, sizeof(__pyx_k_UINT_64), 0, 1, 0, 1},
  {&__pyx_n_u_UINT_8, __pyx_k_UINT_8, sizeof(__pyx_k_UINT_8), 0, 1, 0, 1},
  {&__pyx_n_u_UNCOMPRESSED, __pyx_k_UNCOMPRESSED, sizeof(__pyx_k_UNCOMPRESSED), 0, 1, 0, 1},
  {&__pyx_n_u_UNKNOWN, __pyx_k_UNKNOWN, sizeof(__pyx_k_UNKNOWN), 0, 1, 0, 1},
  {&__pyx_n_u_UTF8, __pyx_k_UTF8, sizeof(__pyx_k_UTF8), 0, 1, 0, 1},
  {&__pyx_n_u_UUID, __pyx_k_UUID, sizeof(__pyx_k_UUID), 0, 1, 0, 1},
  {&__pyx_kp_u_Unrecognized_file_version_assumi, __pyx_k_Unrecognized_file_version_assumi, sizeof(__pyx_k_Unrecognized_file_version_assumi), 0, 1, 0, 0},
  {&__pyx_kp_u_Unsupported_Parquet_format_versi, __pyx_k_Unsupported_Parquet_format_versi, sizeof(__pyx_k_Unsupported_Parquet_format_versi), 0, 1, 0, 0},
  {&__pyx_kp_u_Unsupported_compression, __pyx_k_Unsupported_compression, sizeof(__pyx_k_Unsupported_compression), 0, 1, 0, 0},
  {&__pyx_kp_u_Unsupported_time_unit, __pyx_k_Unsupported_time_unit, sizeof(__pyx_k_Unsupported_time_unit), 0, 1, 0, 0},
  {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
  {&__pyx_n_u_ZSTD, __pyx_k_ZSTD, sizeof(__pyx_k_ZSTD), 0, 1, 0, 1},
  {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0},
  {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0},
  {&__pyx_n_s_allow_truncated_timestamps, __pyx_k_allow_truncated_timestamps, sizeof(__pyx_k_allow_truncated_timestamps), 0, 0, 1, 1},
  {&__pyx_n_s_batch_size, __pyx_k_batch_size, sizeof(__pyx_k_batch_size), 0, 0, 1, 1},
  {&__pyx_n_s_box_time_micro, __pyx_k_box_time_micro, sizeof(__pyx_k_box_time_micro), 0, 0, 1, 1},
  {&__pyx_n_s_box_time_milli, __pyx_k_box_time_milli, sizeof(__pyx_k_box_time_milli), 0, 0, 1, 1},
  {&__pyx_n_s_buffer, __pyx_k_buffer, sizeof(__pyx_k_buffer), 0, 0, 1, 1},
  {&__pyx_n_s_buffer_size, __pyx_k_buffer_size, sizeof(__pyx_k_buffer_size), 0, 0, 1, 1},
  {&__pyx_n_s_cfunc_to_py, __pyx_k_cfunc_to_py, sizeof(__pyx_k_cfunc_to_py), 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_coerce_timestamps, __pyx_k_coerce_timestamps, sizeof(__pyx_k_coerce_timestamps), 0, 0, 1, 1},
  {&__pyx_n_s_column, __pyx_k_column, sizeof(__pyx_k_column), 0, 0, 1, 1},
  {&__pyx_n_s_column_indices, __pyx_k_column_indices, sizeof(__pyx_k_column_indices), 0, 0, 1, 1},
  {&__pyx_n_s_column_name_idx, __pyx_k_column_name_idx, sizeof(__pyx_k_column_name_idx), 0, 0, 1, 1},
  {&__pyx_n_s_columns, __pyx_k_columns, sizeof(__pyx_k_columns), 0, 0, 1, 1},
  {&__pyx_n_s_compression, __pyx_k_compression, sizeof(__pyx_k_compression), 0, 0, 1, 1},
  {&__pyx_n_s_compression_level, __pyx_k_compression_level, sizeof(__pyx_k_compression_level), 0, 0, 1, 1},
  {&__pyx_n_s_container, __pyx_k_container, sizeof(__pyx_k_container), 0, 0, 1, 1},
  {&__pyx_n_s_converted_type, __pyx_k_converted_type, sizeof(__pyx_k_converted_type), 0, 0, 1, 1},
  {&__pyx_n_s_created_by, __pyx_k_created_by, sizeof(__pyx_k_created_by), 0, 0, 1, 1},
  {&__pyx_n_u_created_by, __pyx_k_created_by, sizeof(__pyx_k_created_by), 0, 1, 0, 1},
  {&__pyx_n_s_data_page_offset, __pyx_k_data_page_offset, sizeof(__pyx_k_data_page_offset), 0, 0, 1, 1},
  {&__pyx_n_s_data_page_size, __pyx_k_data_page_size, sizeof(__pyx_k_data_page_size), 0, 0, 1, 1},
  {&__pyx_n_s_datetime_conversion_functions, __pyx_k_datetime_conversion_functions, sizeof(__pyx_k_datetime_conversion_functions), 0, 0, 1, 1},
  {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1},
  {&__pyx_n_s_dictionary_page_offset, __pyx_k_dictionary_page_offset, sizeof(__pyx_k_dictionary_page_offset), 0, 0, 1, 1},
  {&__pyx_n_s_distinct_count, __pyx_k_distinct_count, sizeof(__pyx_k_distinct_count), 0, 0, 1, 1},
  {&__pyx_n_s_encoding, __pyx_k_encoding, sizeof(__pyx_k_encoding), 0, 0, 1, 1},
  {&__pyx_n_s_encodings, __pyx_k_encodings, sizeof(__pyx_k_encodings), 0, 0, 1, 1},
  {&__pyx_n_s_equals, __pyx_k_equals, sizeof(__pyx_k_equals), 0, 0, 1, 1},
  {&__pyx_kp_u_file_metadata_is_only_available, __pyx_k_file_metadata_is_only_available, sizeof(__pyx_k_file_metadata_is_only_available), 0, 1, 0, 0},
  {&__pyx_n_s_file_offset, __pyx_k_file_offset, sizeof(__pyx_k_file_offset), 0, 0, 1, 1},
  {&__pyx_n_s_file_path, __pyx_k_file_path, sizeof(__pyx_k_file_path), 0, 0, 1, 1},
  {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
  {&__pyx_n_s_format_version, __pyx_k_format_version, sizeof(__pyx_k_format_version), 0, 0, 1, 1},
  {&__pyx_n_u_format_version, __pyx_k_format_version, sizeof(__pyx_k_format_version), 0, 1, 0, 1},
  {&__pyx_n_s_frombytes, __pyx_k_frombytes, sizeof(__pyx_k_frombytes), 0, 0, 1, 1},
  {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
  {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
  {&__pyx_n_s_getvalue, __pyx_k_getvalue, sizeof(__pyx_k_getvalue), 0, 0, 1, 1},
  {&__pyx_n_s_has_dictionary_page, __pyx_k_has_dictionary_page, sizeof(__pyx_k_has_dictionary_page), 0, 0, 1, 1},
  {&__pyx_n_s_has_min_max, __pyx_k_has_min_max, sizeof(__pyx_k_has_min_max), 0, 0, 1, 1},
  {&__pyx_kp_u_has_min_max_min_max_null_count, __pyx_k_has_min_max_min_max_null_count, sizeof(__pyx_k_has_min_max_min_max_null_count), 0, 1, 0, 0},
  {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_n_s_indent, __pyx_k_indent, sizeof(__pyx_k_indent), 0, 0, 1, 1},
  {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1},
  {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1},
  {&__pyx_n_s_int64, __pyx_k_int64, sizeof(__pyx_k_int64), 0, 0, 1, 1},
  {&__pyx_n_s_io, __pyx_k_io, sizeof(__pyx_k_io), 0, 0, 1, 1},
  {&__pyx_n_s_is_stats_set, __pyx_k_is_stats_set, sizeof(__pyx_k_is_stats_set), 0, 0, 1, 1},
  {&__pyx_n_s_iteritems, __pyx_k_iteritems, sizeof(__pyx_k_iteritems), 0, 0, 1, 1},
  {&__pyx_n_s_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1},
  {&__pyx_n_s_logical_type, __pyx_k_logical_type, sizeof(__pyx_k_logical_type), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_map, __pyx_k_map, sizeof(__pyx_k_map), 0, 0, 1, 1},
  {&__pyx_n_s_max, __pyx_k_max, sizeof(__pyx_k_max), 0, 0, 1, 1},
  {&__pyx_n_s_max_definition_level, __pyx_k_max_definition_level, sizeof(__pyx_k_max_definition_level), 0, 0, 1, 1},
  {&__pyx_n_s_max_repetition_level, __pyx_k_max_repetition_level, sizeof(__pyx_k_max_repetition_level), 0, 0, 1, 1},
  {&__pyx_n_s_memory_pool, __pyx_k_memory_pool, sizeof(__pyx_k_memory_pool), 0, 0, 1, 1},
  {&__pyx_n_s_metadata, __pyx_k_metadata, sizeof(__pyx_k_metadata), 0, 0, 1, 1},
  {&__pyx_n_u_metadata, __pyx_k_metadata, sizeof(__pyx_k_metadata), 0, 1, 0, 1},
  {&__pyx_n_s_metadata_len, __pyx_k_metadata_len, sizeof(__pyx_k_metadata_len), 0, 0, 1, 1},
  {&__pyx_n_s_min, __pyx_k_min, sizeof(__pyx_k_min), 0, 0, 1, 1},
  {&__pyx_n_u_ms, __pyx_k_ms, sizeof(__pyx_k_ms), 0, 1, 0, 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_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0},
  {&__pyx_kp_u_not_supported_in_parquet_cpp, __pyx_k_not_supported_in_parquet_cpp, sizeof(__pyx_k_not_supported_in_parquet_cpp), 0, 1, 0, 0},
  {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1},
  {&__pyx_n_s_null_count, __pyx_k_null_count, sizeof(__pyx_k_null_count), 0, 0, 1, 1},
  {&__pyx_n_s_num_columns, __pyx_k_num_columns, sizeof(__pyx_k_num_columns), 0, 0, 1, 1},
  {&__pyx_n_u_num_columns, __pyx_k_num_columns, sizeof(__pyx_k_num_columns), 0, 1, 0, 1},
  {&__pyx_n_s_num_row_groups, __pyx_k_num_row_groups, sizeof(__pyx_k_num_row_groups), 0, 0, 1, 1},
  {&__pyx_n_u_num_row_groups, __pyx_k_num_row_groups, sizeof(__pyx_k_num_row_groups), 0, 1, 0, 1},
  {&__pyx_n_s_num_rows, __pyx_k_num_rows, sizeof(__pyx_k_num_rows), 0, 0, 1, 1},
  {&__pyx_n_u_num_rows, __pyx_k_num_rows, sizeof(__pyx_k_num_rows), 0, 1, 0, 1},
  {&__pyx_n_s_num_values, __pyx_k_num_values, sizeof(__pyx_k_num_values), 0, 0, 1, 1},
  {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
  {&__pyx_n_s_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 0, 1, 1},
  {&__pyx_n_s_parent, __pyx_k_parent, sizeof(__pyx_k_parent), 0, 0, 1, 1},
  {&__pyx_kp_u_parquet_cpp_doesn_t_return_valid, __pyx_k_parquet_cpp_doesn_t_return_valid, sizeof(__pyx_k_parquet_cpp_doesn_t_return_valid), 0, 1, 0, 0},
  {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1},
  {&__pyx_n_s_path_in_schema, __pyx_k_path_in_schema, sizeof(__pyx_k_path_in_schema), 0, 0, 1, 1},
  {&__pyx_n_s_physical_type, __pyx_k_physical_type, sizeof(__pyx_k_physical_type), 0, 0, 1, 1},
  {&__pyx_n_s_precision, __pyx_k_precision, sizeof(__pyx_k_precision), 0, 0, 1, 1},
  {&__pyx_n_s_pyarrow__parquet, __pyx_k_pyarrow__parquet, sizeof(__pyx_k_pyarrow__parquet), 0, 0, 1, 1},
  {&__pyx_kp_s_pyarrow__parquet_pyx, __pyx_k_pyarrow__parquet_pyx, sizeof(__pyx_k_pyarrow__parquet_pyx), 0, 0, 1, 0},
  {&__pyx_n_s_pyarrow_compat, __pyx_k_pyarrow_compat, sizeof(__pyx_k_pyarrow_compat), 0, 0, 1, 1},
  {&__pyx_n_s_pyarrow_lib, __pyx_k_pyarrow_lib, sizeof(__pyx_k_pyarrow_lib), 0, 0, 1, 1},
  {&__pyx_n_s_pyarrow_util, __pyx_k_pyarrow_util, sizeof(__pyx_k_pyarrow_util), 0, 0, 1, 1},
  {&__pyx_n_s_pytz, __pyx_k_pytz, sizeof(__pyx_k_pytz), 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_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
  {&__pyx_n_s_read_dictionary, __pyx_k_read_dictionary, sizeof(__pyx_k_read_dictionary), 0, 0, 1, 1},
  {&__pyx_n_s_read_row_groups, __pyx_k_read_row_groups, sizeof(__pyx_k_read_row_groups), 0, 0, 1, 1},
  {&__pyx_n_s_reconstruct_filemetadata, __pyx_k_reconstruct_filemetadata, sizeof(__pyx_k_reconstruct_filemetadata), 0, 0, 1, 1},
  {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
  {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
  {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1},
  {&__pyx_n_s_row_group, __pyx_k_row_group, sizeof(__pyx_k_row_group), 0, 0, 1, 1},
  {&__pyx_n_s_row_group_size, __pyx_k_row_group_size, sizeof(__pyx_k_row_group_size), 0, 0, 1, 1},
  {&__pyx_n_s_row_groups, __pyx_k_row_groups, sizeof(__pyx_k_row_groups), 0, 0, 1, 1},
  {&__pyx_n_s_scale, __pyx_k_scale, sizeof(__pyx_k_scale), 0, 0, 1, 1},
  {&__pyx_n_s_schema, __pyx_k_schema, sizeof(__pyx_k_schema), 0, 0, 1, 1},
  {&__pyx_n_u_schema, __pyx_k_schema, sizeof(__pyx_k_schema), 0, 1, 0, 1},
  {&__pyx_n_s_serialized, __pyx_k_serialized, sizeof(__pyx_k_serialized), 0, 0, 1, 1},
  {&__pyx_n_s_serialized_size, __pyx_k_serialized_size, sizeof(__pyx_k_serialized_size), 0, 0, 1, 1},
  {&__pyx_n_u_serialized_size, __pyx_k_serialized_size, sizeof(__pyx_k_serialized_size), 0, 1, 0, 1},
  {&__pyx_n_s_set_use_threads, __pyx_k_set_use_threads, sizeof(__pyx_k_set_use_threads), 0, 0, 1, 1},
  {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
  {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_six, __pyx_k_six, sizeof(__pyx_k_six), 0, 0, 1, 1},
  {&__pyx_n_s_source, __pyx_k_source, sizeof(__pyx_k_source), 0, 0, 1, 1},
  {&__pyx_n_s_statistics, __pyx_k_statistics, sizeof(__pyx_k_statistics), 0, 0, 1, 1},
  {&__pyx_n_s_stringify_path, __pyx_k_stringify_path, sizeof(__pyx_k_stringify_path), 0, 0, 1, 1},
  {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
  {&__pyx_n_s_table, __pyx_k_table, sizeof(__pyx_k_table), 0, 0, 1, 1},
  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {&__pyx_n_s_to_dict, __pyx_k_to_dict, sizeof(__pyx_k_to_dict), 0, 0, 1, 1},
  {&__pyx_n_s_tobytes, __pyx_k_tobytes, sizeof(__pyx_k_tobytes), 0, 0, 1, 1},
  {&__pyx_n_s_total_byte_size, __pyx_k_total_byte_size, sizeof(__pyx_k_total_byte_size), 0, 0, 1, 1},
  {&__pyx_n_s_total_compressed_size, __pyx_k_total_compressed_size, sizeof(__pyx_k_total_compressed_size), 0, 0, 1, 1},
  {&__pyx_n_s_total_uncompressed_size, __pyx_k_total_uncompressed_size, sizeof(__pyx_k_total_uncompressed_size), 0, 0, 1, 1},
  {&__pyx_n_s_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
  {&__pyx_n_s_uint32, __pyx_k_uint32, sizeof(__pyx_k_uint32), 0, 0, 1, 1},
  {&__pyx_n_s_uint64, __pyx_k_uint64, sizeof(__pyx_k_uint64), 0, 0, 1, 1},
  {&__pyx_n_s_upper, __pyx_k_upper, sizeof(__pyx_k_upper), 0, 0, 1, 1},
  {&__pyx_n_u_us, __pyx_k_us, sizeof(__pyx_k_us), 0, 1, 0, 1},
  {&__pyx_n_s_use_deprecated_int96_timestamps, __pyx_k_use_deprecated_int96_timestamps, sizeof(__pyx_k_use_deprecated_int96_timestamps), 0, 0, 1, 1},
  {&__pyx_n_s_use_dictionary, __pyx_k_use_dictionary, sizeof(__pyx_k_use_dictionary), 0, 0, 1, 1},
  {&__pyx_n_s_use_memory_map, __pyx_k_use_memory_map, sizeof(__pyx_k_use_memory_map), 0, 0, 1, 1},
  {&__pyx_n_s_use_threads, __pyx_k_use_threads, sizeof(__pyx_k_use_threads), 0, 0, 1, 1},
  {&__pyx_n_s_utc, __pyx_k_utc, sizeof(__pyx_k_utc), 0, 0, 1, 1},
  {&__pyx_n_u_utf8, __pyx_k_utf8, sizeof(__pyx_k_utf8), 0, 1, 0, 1},
  {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1},
  {&__pyx_n_s_view, __pyx_k_view, sizeof(__pyx_k_view), 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_where, __pyx_k_where, sizeof(__pyx_k_where), 0, 0, 1, 1},
  {&__pyx_n_s_wrap, __pyx_k_wrap, sizeof(__pyx_k_wrap), 0, 0, 1, 1},
  {&__pyx_n_s_write_statistics, __pyx_k_write_statistics, sizeof(__pyx_k_write_statistics), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) __PYX_ERR(0, 77, __pyx_L1_error)
  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 103, __pyx_L1_error)
  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(0, 104, __pyx_L1_error)
  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 275, __pyx_L1_error)
  __pyx_builtin_map = __Pyx_GetBuiltinName(__pyx_n_s_map); if (!__pyx_builtin_map) __PYX_ERR(0, 433, __pyx_L1_error)
  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(0, 452, __pyx_L1_error)
  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 476, __pyx_L1_error)
  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 497, __pyx_L1_error)
  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 1389, __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);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);

  /* "pyarrow/_parquet.pyx":275
 *             converter = _datetime_conversion_functions()[TimeUnit_NANO]
 *         else:
 *             raise ValueError("Unsupported time unit")             # <<<<<<<<<<<<<<
 * 
 *         if ts_type.is_adjusted_to_utc():
 */
  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Unsupported_time_unit); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);

  /* "pyarrow/_parquet.pyx":452
 *     @property
 *     def has_index_page(self):
 *         raise NotImplementedError('not supported in parquet-cpp')             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_not_supported_in_parquet_cpp); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);

  /* "pyarrow/_parquet.pyx":456
 *     @property
 *     def index_page_offset(self):
 *         raise NotImplementedError("parquet-cpp doesn't return valid values")             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_parquet_cpp_doesn_t_return_valid); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);

  /* "pyarrow/_parquet.pyx":614
 *     def equals(self, FileMetaData other):
 *         # TODO(kszucs): use native method after ARROW-4970 is implemented
 *         for prop in ('schema', 'serialized_size', 'num_columns', 'num_rows',             # <<<<<<<<<<<<<<
 *                      'num_row_groups', 'format_version', 'created_by',
 *                      'metadata'):
 */
  __pyx_tuple__11 = PyTuple_Pack(8, __pyx_n_u_schema, __pyx_n_u_serialized_size, __pyx_n_u_num_columns, __pyx_n_u_num_rows, __pyx_n_u_num_row_groups, __pyx_n_u_format_version, __pyx_n_u_created_by, __pyx_n_u_metadata); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);

  /* "pyarrow/_parquet.pyx":1030
 *             properties.disable_buffered_stream()
 *         else:
 *             raise ValueError('Buffer size must be larger than zero')             # <<<<<<<<<<<<<<
 * 
 *         self.source = source
 */
  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_u_Buffer_size_must_be_larger_than); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 1030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__13);
  __Pyx_GIVEREF(__pyx_tuple__13);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);

  /* "pyarrow/_parquet.pyx":1370
 *             c_row_group_size = ctable.num_rows()
 *         elif row_group_size == 0:
 *             raise ValueError('Row group size cannot be 0')             # <<<<<<<<<<<<<<
 *         else:
 *             c_row_group_size = row_group_size
 */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Row_group_size_cannot_be_0); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);

  /* "pyarrow/_parquet.pyx":1389
 *             result.init(metadata)
 *             return result
 *         raise RuntimeError(             # <<<<<<<<<<<<<<
 *             'file metadata is only available after writer close')
 */
  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_file_metadata_is_only_available); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 1389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 */
  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);

  /* "(tree fragment)":4
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);

  /* "cfunc.to_py":65
 * @cname("__Pyx_CFunc_object____ParquetEncoding___to_py")
 * cdef object __Pyx_CFunc_object____ParquetEncoding___to_py(object (*f)(ParquetEncoding) ):
 *     def wrap(ParquetEncoding encoding_):             # <<<<<<<<<<<<<<
 *         """wrap(encoding_: 'ParquetEncoding')"""
 *         return f(encoding_)
 */
  __pyx_tuple__20 = PyTuple_Pack(2, __pyx_n_s_encoding, __pyx_n_s_encoding); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
  __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_wrap, 65, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(1, 65, __pyx_L1_error)

  /* "pyarrow/_parquet.pyx":544
 * 
 * 
 * def _reconstruct_filemetadata(Buffer serialized):             # <<<<<<<<<<<<<<
 *     cdef:
 *         FileMetaData metadata = FileMetaData.__new__(FileMetaData)
 */
  __pyx_tuple__22 = PyTuple_Pack(4, __pyx_n_s_serialized, __pyx_n_s_metadata, __pyx_n_s_buffer, __pyx_n_s_metadata_len); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyarrow__parquet_pyx, __pyx_n_s_reconstruct_filemetadata, 544, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 544, __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;
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_65536 = PyInt_FromLong(65536L); if (unlikely(!__pyx_int_65536)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 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_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 ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_type_init_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
  /*--- Type init code ---*/
  __pyx_vtabptr_7pyarrow_8_parquet_Statistics = &__pyx_vtable_7pyarrow_8_parquet_Statistics;
  __pyx_vtable_7pyarrow_8_parquet_Statistics.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_parquet_Statistics *, std::shared_ptr< parquet::Statistics>  const &, struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *))__pyx_f_7pyarrow_8_parquet_10Statistics_init;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_Statistics) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_Statistics.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_Statistics.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_Statistics.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_Statistics.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_parquet_Statistics.tp_dict, __pyx_vtabptr_7pyarrow_8_parquet_Statistics) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Statistics, (PyObject *)&__pyx_type_7pyarrow_8_parquet_Statistics) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_parquet_Statistics) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_Statistics = &__pyx_type_7pyarrow_8_parquet_Statistics;
  __pyx_vtabptr_7pyarrow_8_parquet_ParquetLogicalType = &__pyx_vtable_7pyarrow_8_parquet_ParquetLogicalType;
  __pyx_vtable_7pyarrow_8_parquet_ParquetLogicalType.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetLogicalType *, std::shared_ptr< parquet::LogicalType const >  const &))__pyx_f_7pyarrow_8_parquet_18ParquetLogicalType_init;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_ParquetLogicalType) < 0) __PYX_ERR(0, 175, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_ParquetLogicalType.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_ParquetLogicalType.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_ParquetLogicalType.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_ParquetLogicalType.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_parquet_ParquetLogicalType.tp_dict, __pyx_vtabptr_7pyarrow_8_parquet_ParquetLogicalType) < 0) __PYX_ERR(0, 175, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ParquetLogicalType, (PyObject *)&__pyx_type_7pyarrow_8_parquet_ParquetLogicalType) < 0) __PYX_ERR(0, 175, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_parquet_ParquetLogicalType) < 0) __PYX_ERR(0, 175, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_ParquetLogicalType = &__pyx_type_7pyarrow_8_parquet_ParquetLogicalType;
  __pyx_vtabptr_7pyarrow_8_parquet_ColumnChunkMetaData = &__pyx_vtable_7pyarrow_8_parquet_ColumnChunkMetaData;
  __pyx_vtable_7pyarrow_8_parquet_ColumnChunkMetaData.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_parquet_ColumnChunkMetaData *, struct __pyx_obj_7pyarrow_8_parquet_RowGroupMetaData *, int))__pyx_f_7pyarrow_8_parquet_19ColumnChunkMetaData_init;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData) < 0) __PYX_ERR(0, 305, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData.tp_dict, __pyx_vtabptr_7pyarrow_8_parquet_ColumnChunkMetaData) < 0) __PYX_ERR(0, 305, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ColumnChunkMetaData, (PyObject *)&__pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData) < 0) __PYX_ERR(0, 305, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData) < 0) __PYX_ERR(0, 305, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_ColumnChunkMetaData = &__pyx_type_7pyarrow_8_parquet_ColumnChunkMetaData;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_RowGroupMetaData) < 0) __PYX_ERR(0, 467, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_RowGroupMetaData.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_RowGroupMetaData.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_RowGroupMetaData.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_RowGroupMetaData.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_RowGroupMetaData, (PyObject *)&__pyx_type_7pyarrow_8_parquet_RowGroupMetaData) < 0) __PYX_ERR(0, 467, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_RowGroupMetaData = &__pyx_type_7pyarrow_8_parquet_RowGroupMetaData;
  __pyx_vtabptr_7pyarrow_8_parquet_FileMetaData = &__pyx_vtable_7pyarrow_8_parquet_FileMetaData;
  __pyx_vtable_7pyarrow_8_parquet_FileMetaData.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_parquet_FileMetaData *, std::shared_ptr< parquet::FileMetaData>  const &))__pyx_f_7pyarrow_8_parquet_12FileMetaData_init;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_FileMetaData) < 0) __PYX_ERR(0, 555, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_FileMetaData.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_FileMetaData.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_FileMetaData.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_FileMetaData.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_parquet_FileMetaData.tp_dict, __pyx_vtabptr_7pyarrow_8_parquet_FileMetaData) < 0) __PYX_ERR(0, 555, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FileMetaData, (PyObject *)&__pyx_type_7pyarrow_8_parquet_FileMetaData) < 0) __PYX_ERR(0, 555, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_FileMetaData = &__pyx_type_7pyarrow_8_parquet_FileMetaData;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_ParquetSchema) < 0) __PYX_ERR(0, 714, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_ParquetSchema.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_ParquetSchema.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_ParquetSchema.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_ParquetSchema.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ParquetSchema, (PyObject *)&__pyx_type_7pyarrow_8_parquet_ParquetSchema) < 0) __PYX_ERR(0, 714, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_ParquetSchema = &__pyx_type_7pyarrow_8_parquet_ParquetSchema;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_ColumnSchema) < 0) __PYX_ERR(0, 788, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_ColumnSchema.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_ColumnSchema.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_ColumnSchema.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_ColumnSchema.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ColumnSchema, (PyObject *)&__pyx_type_7pyarrow_8_parquet_ColumnSchema) < 0) __PYX_ERR(0, 788, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_ColumnSchema = &__pyx_type_7pyarrow_8_parquet_ColumnSchema;
  __pyx_vtabptr_7pyarrow_8_parquet_ParquetReader = &__pyx_vtable_7pyarrow_8_parquet_ParquetReader;
  __pyx_vtable_7pyarrow_8_parquet_ParquetReader._set_read_dictionary = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetReader *, PyObject *, parquet::ArrowReaderProperties *))__pyx_f_7pyarrow_8_parquet_13ParquetReader__set_read_dictionary;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_ParquetReader) < 0) __PYX_ERR(0, 995, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_ParquetReader.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_ParquetReader.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_ParquetReader.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_ParquetReader.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_parquet_ParquetReader.tp_dict, __pyx_vtabptr_7pyarrow_8_parquet_ParquetReader) < 0) __PYX_ERR(0, 995, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ParquetReader, (PyObject *)&__pyx_type_7pyarrow_8_parquet_ParquetReader) < 0) __PYX_ERR(0, 995, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_parquet_ParquetReader) < 0) __PYX_ERR(0, 995, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_ParquetReader = &__pyx_type_7pyarrow_8_parquet_ParquetReader;
  __pyx_vtabptr_7pyarrow_8_parquet_ParquetWriter = &__pyx_vtable_7pyarrow_8_parquet_ParquetWriter;
  __pyx_vtable_7pyarrow_8_parquet_ParquetWriter._set_int96_support = (void (*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::ArrowWriterProperties::Builder *))__pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_int96_support;
  __pyx_vtable_7pyarrow_8_parquet_ParquetWriter._set_coerce_timestamps = (int (*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::ArrowWriterProperties::Builder *))__pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_coerce_timestamps;
  __pyx_vtable_7pyarrow_8_parquet_ParquetWriter._set_allow_truncated_timestamps = (void (*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::ArrowWriterProperties::Builder *))__pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_allow_truncated_timestamps;
  __pyx_vtable_7pyarrow_8_parquet_ParquetWriter._set_version = (void (*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *))__pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_version;
  __pyx_vtable_7pyarrow_8_parquet_ParquetWriter._set_compression_props = (void (*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *))__pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_compression_props;
  __pyx_vtable_7pyarrow_8_parquet_ParquetWriter._set_dictionary_props = (void (*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *))__pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_dictionary_props;
  __pyx_vtable_7pyarrow_8_parquet_ParquetWriter._set_statistics_props = (void (*)(struct __pyx_obj_7pyarrow_8_parquet_ParquetWriter *, parquet::WriterProperties::Builder *))__pyx_f_7pyarrow_8_parquet_13ParquetWriter__set_statistics_props;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_parquet_ParquetWriter) < 0) __PYX_ERR(0, 1202, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_parquet_ParquetWriter.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_parquet_ParquetWriter.tp_dictoffset && __pyx_type_7pyarrow_8_parquet_ParquetWriter.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_parquet_ParquetWriter.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_parquet_ParquetWriter.tp_dict, __pyx_vtabptr_7pyarrow_8_parquet_ParquetWriter) < 0) __PYX_ERR(0, 1202, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ParquetWriter, (PyObject *)&__pyx_type_7pyarrow_8_parquet_ParquetWriter) < 0) __PYX_ERR(0, 1202, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_parquet_ParquetWriter) < 0) __PYX_ERR(0, 1202, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_parquet_ParquetWriter = &__pyx_type_7pyarrow_8_parquet_ParquetWriter;
  if (PyType_Ready(&__pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py) < 0) __PYX_ERR(1, 64, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py.tp_dictoffset && __pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype___pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py = &__pyx_scope_struct____Pyx_CFunc_object____ParquetEncoding___to_py;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_import_code(void) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
  /*--- Type import code ---*/
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", 
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyTypeObject),
  #else
  sizeof(PyHeapTypeObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(4, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("pyarrow.lib"); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_7pyarrow_3lib_Message = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Message", sizeof(struct __pyx_obj_7pyarrow_3lib_Message), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Message) __PYX_ERR(5, 36, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_MemoryPool = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "MemoryPool", sizeof(struct __pyx_obj_7pyarrow_3lib_MemoryPool), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_MemoryPool) __PYX_ERR(5, 41, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_MemoryPool = (struct __pyx_vtabstruct_7pyarrow_3lib_MemoryPool*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_MemoryPool->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_MemoryPool)) __PYX_ERR(5, 41, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_DataType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "DataType", sizeof(struct __pyx_obj_7pyarrow_3lib_DataType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_DataType) __PYX_ERR(5, 51, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_DataType = (struct __pyx_vtabstruct_7pyarrow_3lib_DataType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_DataType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_DataType)) __PYX_ERR(5, 51, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ListType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ListType", sizeof(struct __pyx_obj_7pyarrow_3lib_ListType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ListType) __PYX_ERR(5, 62, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ListType = (struct __pyx_vtabstruct_7pyarrow_3lib_ListType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ListType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ListType)) __PYX_ERR(5, 62, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_LargeListType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "LargeListType", sizeof(struct __pyx_obj_7pyarrow_3lib_LargeListType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_LargeListType) __PYX_ERR(5, 67, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_LargeListType = (struct __pyx_vtabstruct_7pyarrow_3lib_LargeListType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_LargeListType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_LargeListType)) __PYX_ERR(5, 67, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_StructType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "StructType", sizeof(struct __pyx_obj_7pyarrow_3lib_StructType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_StructType) __PYX_ERR(5, 72, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_StructType = (struct __pyx_vtabstruct_7pyarrow_3lib_StructType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_StructType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_StructType)) __PYX_ERR(5, 72, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_DictionaryMemo = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "DictionaryMemo", sizeof(struct __pyx_obj_7pyarrow_3lib_DictionaryMemo), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_DictionaryMemo) __PYX_ERR(5, 80, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_DictionaryType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "DictionaryType", sizeof(struct __pyx_obj_7pyarrow_3lib_DictionaryType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_DictionaryType) __PYX_ERR(5, 88, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_DictionaryType = (struct __pyx_vtabstruct_7pyarrow_3lib_DictionaryType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_DictionaryType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_DictionaryType)) __PYX_ERR(5, 88, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_TimestampType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "TimestampType", sizeof(struct __pyx_obj_7pyarrow_3lib_TimestampType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_TimestampType) __PYX_ERR(5, 93, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_TimestampType = (struct __pyx_vtabstruct_7pyarrow_3lib_TimestampType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_TimestampType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_TimestampType)) __PYX_ERR(5, 93, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Time32Type = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Time32Type", sizeof(struct __pyx_obj_7pyarrow_3lib_Time32Type), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Time32Type) __PYX_ERR(5, 98, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Time32Type = (struct __pyx_vtabstruct_7pyarrow_3lib_Time32Type*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Time32Type->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Time32Type)) __PYX_ERR(5, 98, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Time64Type = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Time64Type", sizeof(struct __pyx_obj_7pyarrow_3lib_Time64Type), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Time64Type) __PYX_ERR(5, 103, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Time64Type = (struct __pyx_vtabstruct_7pyarrow_3lib_Time64Type*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Time64Type->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Time64Type)) __PYX_ERR(5, 103, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FixedSizeBinaryType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FixedSizeBinaryType", sizeof(struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryType) __PYX_ERR(5, 108, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryType = (struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryType)) __PYX_ERR(5, 108, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Decimal128Type = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Decimal128Type", sizeof(struct __pyx_obj_7pyarrow_3lib_Decimal128Type), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Decimal128Type) __PYX_ERR(5, 113, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Decimal128Type = (struct __pyx_vtabstruct_7pyarrow_3lib_Decimal128Type*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Decimal128Type->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Decimal128Type)) __PYX_ERR(5, 113, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_BaseExtensionType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "BaseExtensionType", sizeof(struct __pyx_obj_7pyarrow_3lib_BaseExtensionType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_BaseExtensionType) __PYX_ERR(5, 118, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_BaseExtensionType = (struct __pyx_vtabstruct_7pyarrow_3lib_BaseExtensionType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_BaseExtensionType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_BaseExtensionType)) __PYX_ERR(5, 118, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ExtensionType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ExtensionType", sizeof(struct __pyx_obj_7pyarrow_3lib_ExtensionType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ExtensionType) __PYX_ERR(5, 123, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ExtensionType = (struct __pyx_vtabstruct_7pyarrow_3lib_ExtensionType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ExtensionType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ExtensionType)) __PYX_ERR(5, 123, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_PyExtensionType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "PyExtensionType", sizeof(struct __pyx_obj_7pyarrow_3lib_PyExtensionType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_PyExtensionType) __PYX_ERR(5, 128, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_PyExtensionType = (struct __pyx_vtabstruct_7pyarrow_3lib_PyExtensionType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_PyExtensionType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_PyExtensionType)) __PYX_ERR(5, 128, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Field = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Field", sizeof(struct __pyx_obj_7pyarrow_3lib_Field), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Field) __PYX_ERR(5, 132, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Field = (struct __pyx_vtabstruct_7pyarrow_3lib_Field*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Field->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Field)) __PYX_ERR(5, 132, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Schema = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Schema", sizeof(struct __pyx_obj_7pyarrow_3lib_Schema), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Schema) __PYX_ERR(5, 143, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Schema = (struct __pyx_vtabstruct_7pyarrow_3lib_Schema*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Schema->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Schema)) __PYX_ERR(5, 143, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Scalar = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Scalar", sizeof(struct __pyx_obj_7pyarrow_3lib_Scalar), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Scalar) __PYX_ERR(5, 152, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_NAType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "NAType", sizeof(struct __pyx_obj_7pyarrow_3lib_NAType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_NAType) __PYX_ERR(5, 157, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ArrayValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ArrayValue", sizeof(struct __pyx_obj_7pyarrow_3lib_ArrayValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ArrayValue) __PYX_ERR(5, 161, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ArrayValue = (struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ArrayValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ArrayValue)) __PYX_ERR(5, 161, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ScalarValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ScalarValue", sizeof(struct __pyx_obj_7pyarrow_3lib_ScalarValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ScalarValue) __PYX_ERR(5, 171, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ScalarValue = (struct __pyx_vtabstruct_7pyarrow_3lib_ScalarValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ScalarValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ScalarValue)) __PYX_ERR(5, 171, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Int8Value = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Int8Value", sizeof(struct __pyx_obj_7pyarrow_3lib_Int8Value), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Int8Value) __PYX_ERR(5, 177, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Int8Value = (struct __pyx_vtabstruct_7pyarrow_3lib_Int8Value*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Int8Value->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Int8Value)) __PYX_ERR(5, 177, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Int64Value = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Int64Value", sizeof(struct __pyx_obj_7pyarrow_3lib_Int64Value), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Int64Value) __PYX_ERR(5, 181, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Int64Value = (struct __pyx_vtabstruct_7pyarrow_3lib_Int64Value*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Int64Value->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Int64Value)) __PYX_ERR(5, 181, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ListValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ListValue", sizeof(struct __pyx_obj_7pyarrow_3lib_ListValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ListValue) __PYX_ERR(5, 185, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ListValue = (struct __pyx_vtabstruct_7pyarrow_3lib_ListValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ListValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ListValue)) __PYX_ERR(5, 185, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_LargeListValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "LargeListValue", sizeof(struct __pyx_obj_7pyarrow_3lib_LargeListValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_LargeListValue) __PYX_ERR(5, 196, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_LargeListValue = (struct __pyx_vtabstruct_7pyarrow_3lib_LargeListValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_LargeListValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_LargeListValue)) __PYX_ERR(5, 196, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_StructValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "StructValue", sizeof(struct __pyx_obj_7pyarrow_3lib_StructValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_StructValue) __PYX_ERR(5, 207, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_StructValue = (struct __pyx_vtabstruct_7pyarrow_3lib_StructValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_StructValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_StructValue)) __PYX_ERR(5, 207, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_UnionValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "UnionValue", sizeof(struct __pyx_obj_7pyarrow_3lib_UnionValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_UnionValue) __PYX_ERR(5, 212, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_UnionValue = (struct __pyx_vtabstruct_7pyarrow_3lib_UnionValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_UnionValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_UnionValue)) __PYX_ERR(5, 212, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_StringValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "StringValue", sizeof(struct __pyx_obj_7pyarrow_3lib_StringValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_StringValue) __PYX_ERR(5, 220, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_StringValue = (struct __pyx_vtabstruct_7pyarrow_3lib_StringValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_StringValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_StringValue)) __PYX_ERR(5, 220, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FixedSizeBinaryValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FixedSizeBinaryValue", sizeof(struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryValue) __PYX_ERR(5, 224, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryValue = (struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryValue)) __PYX_ERR(5, 224, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib__PandasConvertible = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "_PandasConvertible", sizeof(struct __pyx_obj_7pyarrow_3lib__PandasConvertible), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib__PandasConvertible) __PYX_ERR(5, 228, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Array", sizeof(struct __pyx_obj_7pyarrow_3lib_Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Array) __PYX_ERR(5, 232, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Array = (struct __pyx_vtabstruct_7pyarrow_3lib_Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Array)) __PYX_ERR(5, 232, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Tensor = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Tensor", sizeof(struct __pyx_obj_7pyarrow_3lib_Tensor), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Tensor) __PYX_ERR(5, 248, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Tensor = (struct __pyx_vtabstruct_7pyarrow_3lib_Tensor*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Tensor->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Tensor)) __PYX_ERR(5, 248, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_SparseTensorCSR = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "SparseTensorCSR", sizeof(struct __pyx_obj_7pyarrow_3lib_SparseTensorCSR), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_SparseTensorCSR) __PYX_ERR(5, 259, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_SparseTensorCSR = (struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCSR*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_SparseTensorCSR->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_SparseTensorCSR)) __PYX_ERR(5, 259, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_SparseTensorCOO = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "SparseTensorCOO", sizeof(struct __pyx_obj_7pyarrow_3lib_SparseTensorCOO), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_SparseTensorCOO) __PYX_ERR(5, 270, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_SparseTensorCOO = (struct __pyx_vtabstruct_7pyarrow_3lib_SparseTensorCOO*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_SparseTensorCOO->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_SparseTensorCOO)) __PYX_ERR(5, 270, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_NullArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "NullArray", sizeof(struct __pyx_obj_7pyarrow_3lib_NullArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_NullArray) __PYX_ERR(5, 281, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_NullArray = (struct __pyx_vtabstruct_7pyarrow_3lib_NullArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_NullArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_NullArray)) __PYX_ERR(5, 281, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_BooleanArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "BooleanArray", sizeof(struct __pyx_obj_7pyarrow_3lib_BooleanArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_BooleanArray) __PYX_ERR(5, 285, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_BooleanArray = (struct __pyx_vtabstruct_7pyarrow_3lib_BooleanArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_BooleanArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_BooleanArray)) __PYX_ERR(5, 285, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_NumericArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "NumericArray", sizeof(struct __pyx_obj_7pyarrow_3lib_NumericArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_NumericArray) __PYX_ERR(5, 289, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_NumericArray = (struct __pyx_vtabstruct_7pyarrow_3lib_NumericArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_NumericArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_NumericArray)) __PYX_ERR(5, 289, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_IntegerArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "IntegerArray", sizeof(struct __pyx_obj_7pyarrow_3lib_IntegerArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_IntegerArray) __PYX_ERR(5, 293, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_IntegerArray = (struct __pyx_vtabstruct_7pyarrow_3lib_IntegerArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_IntegerArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_IntegerArray)) __PYX_ERR(5, 293, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FloatingPointArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FloatingPointArray", sizeof(struct __pyx_obj_7pyarrow_3lib_FloatingPointArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FloatingPointArray) __PYX_ERR(5, 297, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FloatingPointArray = (struct __pyx_vtabstruct_7pyarrow_3lib_FloatingPointArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FloatingPointArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FloatingPointArray)) __PYX_ERR(5, 297, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Int8Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Int8Array", sizeof(struct __pyx_obj_7pyarrow_3lib_Int8Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Int8Array) __PYX_ERR(5, 301, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Int8Array = (struct __pyx_vtabstruct_7pyarrow_3lib_Int8Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Int8Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Int8Array)) __PYX_ERR(5, 301, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_UInt8Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "UInt8Array", sizeof(struct __pyx_obj_7pyarrow_3lib_UInt8Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_UInt8Array) __PYX_ERR(5, 305, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_UInt8Array = (struct __pyx_vtabstruct_7pyarrow_3lib_UInt8Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_UInt8Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_UInt8Array)) __PYX_ERR(5, 305, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Int16Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Int16Array", sizeof(struct __pyx_obj_7pyarrow_3lib_Int16Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Int16Array) __PYX_ERR(5, 309, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Int16Array = (struct __pyx_vtabstruct_7pyarrow_3lib_Int16Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Int16Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Int16Array)) __PYX_ERR(5, 309, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_UInt16Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "UInt16Array", sizeof(struct __pyx_obj_7pyarrow_3lib_UInt16Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_UInt16Array) __PYX_ERR(5, 313, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_UInt16Array = (struct __pyx_vtabstruct_7pyarrow_3lib_UInt16Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_UInt16Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_UInt16Array)) __PYX_ERR(5, 313, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Int32Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Int32Array", sizeof(struct __pyx_obj_7pyarrow_3lib_Int32Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Int32Array) __PYX_ERR(5, 317, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Int32Array = (struct __pyx_vtabstruct_7pyarrow_3lib_Int32Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Int32Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Int32Array)) __PYX_ERR(5, 317, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_UInt32Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "UInt32Array", sizeof(struct __pyx_obj_7pyarrow_3lib_UInt32Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_UInt32Array) __PYX_ERR(5, 321, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_UInt32Array = (struct __pyx_vtabstruct_7pyarrow_3lib_UInt32Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_UInt32Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_UInt32Array)) __PYX_ERR(5, 321, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Int64Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Int64Array", sizeof(struct __pyx_obj_7pyarrow_3lib_Int64Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Int64Array) __PYX_ERR(5, 325, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Int64Array = (struct __pyx_vtabstruct_7pyarrow_3lib_Int64Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Int64Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Int64Array)) __PYX_ERR(5, 325, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_UInt64Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "UInt64Array", sizeof(struct __pyx_obj_7pyarrow_3lib_UInt64Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_UInt64Array) __PYX_ERR(5, 329, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_UInt64Array = (struct __pyx_vtabstruct_7pyarrow_3lib_UInt64Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_UInt64Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_UInt64Array)) __PYX_ERR(5, 329, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_HalfFloatArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "HalfFloatArray", sizeof(struct __pyx_obj_7pyarrow_3lib_HalfFloatArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_HalfFloatArray) __PYX_ERR(5, 333, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_HalfFloatArray = (struct __pyx_vtabstruct_7pyarrow_3lib_HalfFloatArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_HalfFloatArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_HalfFloatArray)) __PYX_ERR(5, 333, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FloatArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FloatArray", sizeof(struct __pyx_obj_7pyarrow_3lib_FloatArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FloatArray) __PYX_ERR(5, 337, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FloatArray = (struct __pyx_vtabstruct_7pyarrow_3lib_FloatArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FloatArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FloatArray)) __PYX_ERR(5, 337, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_DoubleArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "DoubleArray", sizeof(struct __pyx_obj_7pyarrow_3lib_DoubleArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_DoubleArray) __PYX_ERR(5, 341, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_DoubleArray = (struct __pyx_vtabstruct_7pyarrow_3lib_DoubleArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_DoubleArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_DoubleArray)) __PYX_ERR(5, 341, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FixedSizeBinaryArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FixedSizeBinaryArray", sizeof(struct __pyx_obj_7pyarrow_3lib_FixedSizeBinaryArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryArray) __PYX_ERR(5, 345, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryArray = (struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeBinaryArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FixedSizeBinaryArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FixedSizeBinaryArray)) __PYX_ERR(5, 345, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Decimal128Array = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Decimal128Array", sizeof(struct __pyx_obj_7pyarrow_3lib_Decimal128Array), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Decimal128Array) __PYX_ERR(5, 349, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Decimal128Array = (struct __pyx_vtabstruct_7pyarrow_3lib_Decimal128Array*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Decimal128Array->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Decimal128Array)) __PYX_ERR(5, 349, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_StructArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "StructArray", sizeof(struct __pyx_obj_7pyarrow_3lib_StructArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_StructArray) __PYX_ERR(5, 353, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_StructArray = (struct __pyx_vtabstruct_7pyarrow_3lib_StructArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_StructArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_StructArray)) __PYX_ERR(5, 353, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ListArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ListArray", sizeof(struct __pyx_obj_7pyarrow_3lib_ListArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ListArray) __PYX_ERR(5, 357, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ListArray = (struct __pyx_vtabstruct_7pyarrow_3lib_ListArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ListArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ListArray)) __PYX_ERR(5, 357, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_LargeListArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "LargeListArray", sizeof(struct __pyx_obj_7pyarrow_3lib_LargeListArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_LargeListArray) __PYX_ERR(5, 361, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_LargeListArray = (struct __pyx_vtabstruct_7pyarrow_3lib_LargeListArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_LargeListArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_LargeListArray)) __PYX_ERR(5, 361, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_UnionArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "UnionArray", sizeof(struct __pyx_obj_7pyarrow_3lib_UnionArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_UnionArray) __PYX_ERR(5, 365, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_UnionArray = (struct __pyx_vtabstruct_7pyarrow_3lib_UnionArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_UnionArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_UnionArray)) __PYX_ERR(5, 365, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_StringArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "StringArray", sizeof(struct __pyx_obj_7pyarrow_3lib_StringArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_StringArray) __PYX_ERR(5, 369, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_StringArray = (struct __pyx_vtabstruct_7pyarrow_3lib_StringArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_StringArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_StringArray)) __PYX_ERR(5, 369, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_BinaryArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "BinaryArray", sizeof(struct __pyx_obj_7pyarrow_3lib_BinaryArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_BinaryArray) __PYX_ERR(5, 373, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_BinaryArray = (struct __pyx_vtabstruct_7pyarrow_3lib_BinaryArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_BinaryArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_BinaryArray)) __PYX_ERR(5, 373, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_DictionaryArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "DictionaryArray", sizeof(struct __pyx_obj_7pyarrow_3lib_DictionaryArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_DictionaryArray) __PYX_ERR(5, 377, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_DictionaryArray = (struct __pyx_vtabstruct_7pyarrow_3lib_DictionaryArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_DictionaryArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_DictionaryArray)) __PYX_ERR(5, 377, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ExtensionArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ExtensionArray", sizeof(struct __pyx_obj_7pyarrow_3lib_ExtensionArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ExtensionArray) __PYX_ERR(5, 382, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ExtensionArray = (struct __pyx_vtabstruct_7pyarrow_3lib_ExtensionArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ExtensionArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ExtensionArray)) __PYX_ERR(5, 382, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ChunkedArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ChunkedArray", sizeof(struct __pyx_obj_7pyarrow_3lib_ChunkedArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ChunkedArray) __PYX_ERR(5, 392, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ChunkedArray = (struct __pyx_vtabstruct_7pyarrow_3lib_ChunkedArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ChunkedArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ChunkedArray)) __PYX_ERR(5, 392, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Table = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Table", sizeof(struct __pyx_obj_7pyarrow_3lib_Table), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Table) __PYX_ERR(5, 405, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Table = (struct __pyx_vtabstruct_7pyarrow_3lib_Table*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Table->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Table)) __PYX_ERR(5, 405, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_RecordBatch = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "RecordBatch", sizeof(struct __pyx_obj_7pyarrow_3lib_RecordBatch), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_RecordBatch) __PYX_ERR(5, 413, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_RecordBatch = (struct __pyx_vtabstruct_7pyarrow_3lib_RecordBatch*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_RecordBatch->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_RecordBatch)) __PYX_ERR(5, 413, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_Buffer = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "Buffer", sizeof(struct __pyx_obj_7pyarrow_3lib_Buffer), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_Buffer) __PYX_ERR(5, 422, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_Buffer = (struct __pyx_vtabstruct_7pyarrow_3lib_Buffer*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_Buffer->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_Buffer)) __PYX_ERR(5, 422, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_ResizableBuffer = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "ResizableBuffer", sizeof(struct __pyx_obj_7pyarrow_3lib_ResizableBuffer), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_ResizableBuffer) __PYX_ERR(5, 432, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_ResizableBuffer = (struct __pyx_vtabstruct_7pyarrow_3lib_ResizableBuffer*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_ResizableBuffer->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_ResizableBuffer)) __PYX_ERR(5, 432, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_NativeFile = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "NativeFile", sizeof(struct __pyx_obj_7pyarrow_3lib_NativeFile), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_NativeFile) __PYX_ERR(5, 437, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_NativeFile = (struct __pyx_vtabstruct_7pyarrow_3lib_NativeFile*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_NativeFile->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_NativeFile)) __PYX_ERR(5, 437, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_BufferedInputStream = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "BufferedInputStream", sizeof(struct __pyx_obj_7pyarrow_3lib_BufferedInputStream), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_BufferedInputStream) __PYX_ERR(5, 461, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_BufferedInputStream = (struct __pyx_vtabstruct_7pyarrow_3lib_BufferedInputStream*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_BufferedInputStream->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_BufferedInputStream)) __PYX_ERR(5, 461, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_BufferedOutputStream = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "BufferedOutputStream", sizeof(struct __pyx_obj_7pyarrow_3lib_BufferedOutputStream), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_BufferedOutputStream) __PYX_ERR(5, 465, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_BufferedOutputStream = (struct __pyx_vtabstruct_7pyarrow_3lib_BufferedOutputStream*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_BufferedOutputStream->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_BufferedOutputStream)) __PYX_ERR(5, 465, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_CompressedInputStream = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "CompressedInputStream", sizeof(struct __pyx_obj_7pyarrow_3lib_CompressedInputStream), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_CompressedInputStream) __PYX_ERR(5, 469, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_CompressedInputStream = (struct __pyx_vtabstruct_7pyarrow_3lib_CompressedInputStream*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_CompressedInputStream->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_CompressedInputStream)) __PYX_ERR(5, 469, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_CompressedOutputStream = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "CompressedOutputStream", sizeof(struct __pyx_obj_7pyarrow_3lib_CompressedOutputStream), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_CompressedOutputStream) __PYX_ERR(5, 473, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_CompressedOutputStream = (struct __pyx_vtabstruct_7pyarrow_3lib_CompressedOutputStream*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_CompressedOutputStream->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_CompressedOutputStream)) __PYX_ERR(5, 473, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib__CRecordBatchWriter = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "_CRecordBatchWriter", sizeof(struct __pyx_obj_7pyarrow_3lib__CRecordBatchWriter), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib__CRecordBatchWriter) __PYX_ERR(5, 477, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib__CRecordBatchReader = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "_CRecordBatchReader", sizeof(struct __pyx_obj_7pyarrow_3lib__CRecordBatchReader), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib__CRecordBatchReader) __PYX_ERR(5, 482, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

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
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  __pyx_t_1 = PyImport_ImportModule("pyarrow.lib"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "check_status", (void (**)(void))&__pyx_f_7pyarrow_3lib_check_status, "int (arrow::Status const &)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "maybe_unbox_memory_pool", (void (**)(void))&__pyx_f_7pyarrow_3lib_maybe_unbox_memory_pool, " arrow::MemoryPool *(struct __pyx_obj_7pyarrow_3lib_MemoryPool *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "get_reader", (void (**)(void))&__pyx_f_7pyarrow_3lib_get_reader, "PyObject *(PyObject *, bool, std::shared_ptr<arrow::io::RandomAccessFile>  *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "get_writer", (void (**)(void))&__pyx_f_7pyarrow_3lib_get_writer, "PyObject *(PyObject *, std::shared_ptr<arrow::io::OutputStream>  *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_wrap_chunked_array", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_wrap_chunked_array, "PyObject *(std::shared_ptr< arrow::ChunkedArray>  const &)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_wrap_buffer", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_wrap_buffer, "PyObject *(std::shared_ptr< arrow::Buffer>  const &)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_wrap_schema", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_wrap_schema, "PyObject *(std::shared_ptr< arrow::Schema>  const &)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_wrap_table", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_wrap_table, "PyObject *(std::shared_ptr< arrow::Table>  const &)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}


#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 init_parquet(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC init_parquet(void)
#else
__Pyx_PyMODINIT_FUNC PyInit__parquet(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit__parquet(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__parquet(PyObject *__pyx_pyinit_module)
#endif
#endif
{
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannyDeclarations
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  if (__pyx_m) {
    if (__pyx_m == __pyx_pyinit_module) return 0;
    PyErr_SetString(PyExc_RuntimeError, "Module '_parquet' 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__parquet(void)", 0);
  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 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(0, 1, __pyx_L1_error)
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
  #ifdef __Pyx_CyFunction_USED
  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Coroutine_USED
  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_AsyncGen_USED
  if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_StopAsyncIteration_USED
  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 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("_parquet", __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(0, 1, __pyx_L1_error)
  #endif
  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_d);
  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_b);
  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_cython_runtime);
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 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(0, 1, __pyx_L1_error)
  #endif
  if (__pyx_module_is_main_pyarrow___parquet) {
    if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  }
  #if PY_MAJOR_VERSION >= 3
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
    if (!PyDict_GetItemString(modules, "pyarrow._parquet")) {
      if (unlikely(PyDict_SetItemString(modules, "pyarrow._parquet", __pyx_m) < 0)) __PYX_ERR(0, 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();
  (void)__Pyx_modinit_function_export_code();
  if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error;
  if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error;
  (void)__Pyx_modinit_variable_import_code();
  if (unlikely(__Pyx_modinit_function_import_code() != 0)) goto __pyx_L1_error;
  /*--- Execution code ---*/
  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
  if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif

  /* "pyarrow/_parquet.pyx":24
 * from __future__ import absolute_import
 * 
 * import io             # <<<<<<<<<<<<<<
 * import six
 * import warnings
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_io, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_io, __pyx_t_1) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":25
 * 
 * import io
 * import six             # <<<<<<<<<<<<<<
 * import warnings
 * 
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_six, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_six, __pyx_t_1) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":26
 * import io
 * import six
 * import warnings             # <<<<<<<<<<<<<<
 * 
 * import numpy as np
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_warnings, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_warnings, __pyx_t_1) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":28
 * import warnings
 * 
 * import numpy as np             # <<<<<<<<<<<<<<
 * 
 * from cython.operator cimport dereference as deref
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":43
 *                           NativeFile, get_reader, get_writer)
 * 
 * from pyarrow.compat import tobytes, frombytes             # <<<<<<<<<<<<<<
 * from pyarrow.lib import (ArrowException, NativeFile, _stringify_path,
 *                          BufferOutputStream,
 */
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_tobytes);
  __Pyx_GIVEREF(__pyx_n_s_tobytes);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_tobytes);
  __Pyx_INCREF(__pyx_n_s_frombytes);
  __Pyx_GIVEREF(__pyx_n_s_frombytes);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_frombytes);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pyarrow_compat, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __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_tobytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tobytes, __pyx_t_1) < 0) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_frombytes, __pyx_t_1) < 0) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":44
 * 
 * from pyarrow.compat import tobytes, frombytes
 * from pyarrow.lib import (ArrowException, NativeFile, _stringify_path,             # <<<<<<<<<<<<<<
 *                          BufferOutputStream,
 *                          _datetime_conversion_functions,
 */
  __pyx_t_2 = PyList_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_ArrowException);
  __Pyx_GIVEREF(__pyx_n_s_ArrowException);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ArrowException);
  __Pyx_INCREF(__pyx_n_s_NativeFile);
  __Pyx_GIVEREF(__pyx_n_s_NativeFile);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_NativeFile);
  __Pyx_INCREF(__pyx_n_s_stringify_path);
  __Pyx_GIVEREF(__pyx_n_s_stringify_path);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_stringify_path);
  __Pyx_INCREF(__pyx_n_s_BufferOutputStream);
  __Pyx_GIVEREF(__pyx_n_s_BufferOutputStream);
  PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_BufferOutputStream);
  __Pyx_INCREF(__pyx_n_s_datetime_conversion_functions);
  __Pyx_GIVEREF(__pyx_n_s_datetime_conversion_functions);
  PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_datetime_conversion_functions);
  __Pyx_INCREF(__pyx_n_s_box_time_milli);
  __Pyx_GIVEREF(__pyx_n_s_box_time_milli);
  PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_box_time_milli);
  __Pyx_INCREF(__pyx_n_s_box_time_micro);
  __Pyx_GIVEREF(__pyx_n_s_box_time_micro);
  PyList_SET_ITEM(__pyx_t_2, 6, __pyx_n_s_box_time_micro);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_pyarrow_lib, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ArrowException); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ArrowException, __pyx_t_2) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_stringify_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_stringify_path, __pyx_t_2) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BufferOutputStream); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BufferOutputStream, __pyx_t_2) < 0) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_datetime_conversion_functions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_datetime_conversion_functions, __pyx_t_2) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_box_time_milli); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_box_time_milli, __pyx_t_2) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_box_time_micro); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_box_time_micro, __pyx_t_2) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_parquet.pyx":49
 *                          _box_time_milli,
 *                          _box_time_micro)
 * from pyarrow.util import indent             # <<<<<<<<<<<<<<
 * 
 * cimport cpython as cp
 */
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_indent);
  __Pyx_GIVEREF(__pyx_n_s_indent);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_indent);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pyarrow_util, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __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_indent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_indent, __pyx_t_1) < 0) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":544
 * 
 * 
 * def _reconstruct_filemetadata(Buffer serialized):             # <<<<<<<<<<<<<<
 *     cdef:
 *         FileMetaData metadata = FileMetaData.__new__(FileMetaData)
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyarrow_8_parquet_1_reconstruct_filemetadata, NULL, __pyx_n_s_pyarrow__parquet); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_reconstruct_filemetadata, __pyx_t_2) < 0) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_parquet.pyx":1
 * # Licensed to the Apache Software Foundation (ASF) under one             # <<<<<<<<<<<<<<
 * # or more contributor license agreements.  See the NOTICE file
 * # distributed with this work for additional information
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "string.from_py":13
 * 
 * @cname("__pyx_convert_string_from_py_std__in_string")
 * cdef string __pyx_convert_string_from_py_std__in_string(object o) except *:             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t length = 0
 *     cdef const char* data = __Pyx_PyObject_AsStringAndSize(o, &length)
 */

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  if (__pyx_m) {
    if (__pyx_d) {
      __Pyx_AddTraceback("init pyarrow._parquet", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    Py_CLEAR(__pyx_m);
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init pyarrow._parquet");
  }
  __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
}

/* --- 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;
}

/* 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);
}

/* 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;
}

/* 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

/* 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

/* 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;
}

/* 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;
}

/* 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

/* 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

/* 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);
}

/* 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

/* 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));
}

/* 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

/* 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;
}

/* 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;
}

/* 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;
}

/* 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);
}

/* 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
}

/* 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;
}

/* 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;
}

/* 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;
}

/* 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;
}

/* 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
}

/* 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
}

/* 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;
}

/* PyObjectCallMethod0 */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
    PyObject *method = NULL, *result = NULL;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_CallOneArg(method, obj);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) goto bad;
    result = __Pyx_PyObject_CallNoArg(method);
    Py_DECREF(method);
bad:
    return result;
}

/* 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");
}

/* 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);
}

/* 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;
}

/* RaiseNoneIterError */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
}

/* UnpackTupleError */
static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
    if (t == Py_None) {
      __Pyx_RaiseNoneNotIterableError();
    } else if (PyTuple_GET_SIZE(t) < index) {
      __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
    } else {
      __Pyx_RaiseTooManyValuesError(index);
    }
}

/* UnpackTuple2 */
static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
        PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) {
    PyObject *value1 = NULL, *value2 = NULL;
#if CYTHON_COMPILING_IN_PYPY
    value1 = PySequence_ITEM(tuple, 0);  if (unlikely(!value1)) goto bad;
    value2 = PySequence_ITEM(tuple, 1);  if (unlikely(!value2)) goto bad;
#else
    value1 = PyTuple_GET_ITEM(tuple, 0);  Py_INCREF(value1);
    value2 = PyTuple_GET_ITEM(tuple, 1);  Py_INCREF(value2);
#endif
    if (decref_tuple) {
        Py_DECREF(tuple);
    }
    *pvalue1 = value1;
    *pvalue2 = value2;
    return 0;
#if CYTHON_COMPILING_IN_PYPY
bad:
    Py_XDECREF(value1);
    Py_XDECREF(value2);
    if (decref_tuple) { Py_XDECREF(tuple); }
    return -1;
#endif
}
static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
                                       int has_known_size, int decref_tuple) {
    Py_ssize_t index;
    PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
    iternextfunc iternext;
    iter = PyObject_GetIter(tuple);
    if (unlikely(!iter)) goto bad;
    if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
    iternext = Py_TYPE(iter)->tp_iternext;
    value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
    value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
    if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
    Py_DECREF(iter);
    *pvalue1 = value1;
    *pvalue2 = value2;
    return 0;
unpacking_failed:
    if (!has_known_size && __Pyx_IterFinish() == 0)
        __Pyx_RaiseNeedMoreValuesError(index);
bad:
    Py_XDECREF(iter);
    Py_XDECREF(value1);
    Py_XDECREF(value2);
    if (decref_tuple) { Py_XDECREF(tuple); }
    return -1;
}

/* dict_iter */
static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
                                                   Py_ssize_t* p_orig_length, int* p_source_is_dict) {
    is_dict = is_dict || likely(PyDict_CheckExact(iterable));
    *p_source_is_dict = is_dict;
    if (is_dict) {
#if !CYTHON_COMPILING_IN_PYPY
        *p_orig_length = PyDict_Size(iterable);
        Py_INCREF(iterable);
        return iterable;
#elif PY_MAJOR_VERSION >= 3
        static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL;
        PyObject **pp = NULL;
        if (method_name) {
            const char *name = PyUnicode_AsUTF8(method_name);
            if (strcmp(name, "iteritems") == 0) pp = &py_items;
            else if (strcmp(name, "iterkeys") == 0) pp = &py_keys;
            else if (strcmp(name, "itervalues") == 0) pp = &py_values;
            if (pp) {
                if (!*pp) {
                    *pp = PyUnicode_FromString(name + 4);
                    if (!*pp)
                        return NULL;
                }
                method_name = *pp;
            }
        }
#endif
    }
    *p_orig_length = 0;
    if (method_name) {
        PyObject* iter;
        iterable = __Pyx_PyObject_CallMethod0(iterable, method_name);
        if (!iterable)
            return NULL;
#if !CYTHON_COMPILING_IN_PYPY
        if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
            return iterable;
#endif
        iter = PyObject_GetIter(iterable);
        Py_DECREF(iterable);
        return iter;
    }
    return PyObject_GetIter(iterable);
}
static CYTHON_INLINE int __Pyx_dict_iter_next(
        PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos,
        PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
    PyObject* next_item;
#if !CYTHON_COMPILING_IN_PYPY
    if (source_is_dict) {
        PyObject *key, *value;
        if (unlikely(orig_length != PyDict_Size(iter_obj))) {
            PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
            return -1;
        }
        if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
            return 0;
        }
        if (pitem) {
            PyObject* tuple = PyTuple_New(2);
            if (unlikely(!tuple)) {
                return -1;
            }
            Py_INCREF(key);
            Py_INCREF(value);
            PyTuple_SET_ITEM(tuple, 0, key);
            PyTuple_SET_ITEM(tuple, 1, value);
            *pitem = tuple;
        } else {
            if (pkey) {
                Py_INCREF(key);
                *pkey = key;
            }
            if (pvalue) {
                Py_INCREF(value);
                *pvalue = value;
            }
        }
        return 1;
    } else if (PyTuple_CheckExact(iter_obj)) {
        Py_ssize_t pos = *ppos;
        if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0;
        *ppos = pos + 1;
        next_item = PyTuple_GET_ITEM(iter_obj, pos);
        Py_INCREF(next_item);
    } else if (PyList_CheckExact(iter_obj)) {
        Py_ssize_t pos = *ppos;
        if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0;
        *ppos = pos + 1;
        next_item = PyList_GET_ITEM(iter_obj, pos);
        Py_INCREF(next_item);
    } else
#endif
    {
        next_item = PyIter_Next(iter_obj);
        if (unlikely(!next_item)) {
            return __Pyx_IterFinish();
        }
    }
    if (pitem) {
        *pitem = next_item;
    } else if (pkey && pvalue) {
        if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
            return -1;
    } else if (pkey) {
        *pkey = next_item;
    } else {
        *pvalue = next_item;
    }
    return 1;
}

/* PyIntCompare */
static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED long inplace) {
    if (op1 == op2) {
        Py_RETURN_TRUE;
    }
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long a = PyInt_AS_LONG(op1);
        if (a == b) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        int unequal;
        unsigned long uintval;
        Py_ssize_t size = Py_SIZE(op1);
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        if (intval == 0) {
            if (size == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE;
        } else if (intval < 0) {
            if (size >= 0)
                Py_RETURN_FALSE;
            intval = -intval;
            size = -size;
        } else {
            if (size <= 0)
                Py_RETURN_FALSE;
        }
        uintval = (unsigned long) intval;
#if PyLong_SHIFT * 4 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 4)) {
            unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 3 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 3)) {
            unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 2 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 2)) {
            unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 1 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 1)) {
            unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
            unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK));
        if (unequal == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        const long b = intval;
        double a = PyFloat_AS_DOUBLE(op1);
        if ((double)a == (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    return (
        PyObject_RichCompare(op1, op2, Py_EQ));
}

/* 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);
}

/* 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;
}

/* SetupReduce */
static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
  int ret;
  PyObject *name_attr;
  name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2);
  if (likely(name_attr)) {
      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
  } else {
      ret = -1;
  }
  if (unlikely(ret < 0)) {
      PyErr_Clear();
      ret = 0;
  }
  Py_XDECREF(name_attr);
  return ret;
}
static int __Pyx_setup_reduce(PyObject* type_obj) {
    int ret = 0;
    PyObject *object_reduce = NULL;
    PyObject *object_reduce_ex = NULL;
    PyObject *reduce = NULL;
    PyObject *reduce_ex = NULL;
    PyObject *reduce_cython = NULL;
    PyObject *setstate = NULL;
    PyObject *setstate_cython = NULL;
#if CYTHON_USE_PYTYPE_LOOKUP
    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD;
#else
    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD;
#endif
#if CYTHON_USE_PYTYPE_LOOKUP
    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
#else
    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
#endif
    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD;
    if (reduce_ex == object_reduce_ex) {
#if CYTHON_USE_PYTYPE_LOOKUP
        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
#else
        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
#endif
        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD;
        if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
            reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD;
            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD;
            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD;
            setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
            if (!setstate) PyErr_Clear();
            if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
                setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD;
                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD;
                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD;
            }
            PyType_Modified((PyTypeObject*)type_obj);
        }
    }
    goto GOOD;
BAD:
    if (!PyErr_Occurred())
        PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
    ret = -1;
GOOD:
#if !CYTHON_USE_PYTYPE_LOOKUP
    Py_XDECREF(object_reduce);
    Py_XDECREF(object_reduce_ex);
#endif
    Py_XDECREF(reduce);
    Py_XDECREF(reduce_ex);
    Py_XDECREF(reduce_cython);
    Py_XDECREF(setstate);
    Py_XDECREF(setstate_cython);
    return ret;
}

/* TypeImport */
#ifndef __PYX_HAVE_RT_ImportType
#define __PYX_HAVE_RT_ImportType
static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name,
    size_t size, enum __Pyx_ImportType_CheckSize check_size)
{
    PyObject *result = 0;
    char warning[200];
    Py_ssize_t basicsize;
#ifdef Py_LIMITED_API
    PyObject *py_basicsize;
#endif
    result = PyObject_GetAttrString(module, class_name);
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError,
            "%.200s.%.200s is not a type object",
            module_name, class_name);
        goto bad;
    }
#ifndef Py_LIMITED_API
    basicsize = ((PyTypeObject *)result)->tp_basicsize;
#else
    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
    if (!py_basicsize)
        goto bad;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = 0;
    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
#endif
    if ((size_t)basicsize < size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        goto bad;
    }
    if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        goto bad;
    }
    else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) {
        PyOS_snprintf(warning, sizeof(warning),
            "%s.%s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(result);
    return NULL;
}
#endif

/* GetVTable */
static void* __Pyx_GetVtable(PyObject *dict) {
    void* ptr;
    PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
    if (!ob)
        goto bad;
#if PY_VERSION_HEX >= 0x02070000
    ptr = PyCapsule_GetPointer(ob, 0);
#else
    ptr = PyCObject_AsVoidPtr(ob);
#endif
    if (!ptr && !PyErr_Occurred())
        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
    Py_DECREF(ob);
    return ptr;
bad:
    Py_XDECREF(ob);
    return NULL;
}

/* 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;
}

/* 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_int64_t(int64_t value) {
    const int64_t neg_one = (int64_t) ((int64_t) 0 - (int64_t) 1), const_zero = (int64_t) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int64_t) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int64_t) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int64_t) <= 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(int64_t),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int32_t(int32_t value) {
    const int32_t neg_one = (int32_t) ((int32_t) 0 - (int32_t) 1), const_zero = (int32_t) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int32_t) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int32_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int32_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int32_t) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int32_t) <= 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(int32_t),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____arrow_3a__3a_TimeUnit_3a__3a_type(enum  arrow::TimeUnit::type value) {
    const enum  arrow::TimeUnit::type neg_one = (enum  arrow::TimeUnit::type) ((enum  arrow::TimeUnit::type) 0 - (enum  arrow::TimeUnit::type) 1), const_zero = (enum  arrow::TimeUnit::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum  arrow::TimeUnit::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum  arrow::TimeUnit::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  arrow::TimeUnit::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum  arrow::TimeUnit::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  arrow::TimeUnit::type) <= 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(enum  arrow::TimeUnit::type),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_Encoding_3a__3a_type(enum  parquet::Encoding::type value) {
    const enum  parquet::Encoding::type neg_one = (enum  parquet::Encoding::type) ((enum  parquet::Encoding::type) 0 - (enum  parquet::Encoding::type) 1), const_zero = (enum  parquet::Encoding::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum  parquet::Encoding::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum  parquet::Encoding::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::Encoding::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum  parquet::Encoding::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::Encoding::type) <= 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(enum  parquet::Encoding::type),
                                     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_uint32_t(uint32_t value) {
    const uint32_t neg_one = (uint32_t) ((uint32_t) 0 - (uint32_t) 1), const_zero = (uint32_t) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(uint32_t) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(uint32_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(uint32_t) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(uint32_t) <= 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(uint32_t),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_ParquetVersion_3a__3a_type(enum  parquet::ParquetVersion::type value) {
    const enum  parquet::ParquetVersion::type neg_one = (enum  parquet::ParquetVersion::type) ((enum  parquet::ParquetVersion::type) 0 - (enum  parquet::ParquetVersion::type) 1), const_zero = (enum  parquet::ParquetVersion::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum  parquet::ParquetVersion::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum  parquet::ParquetVersion::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::ParquetVersion::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum  parquet::ParquetVersion::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::ParquetVersion::type) <= 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(enum  parquet::ParquetVersion::type),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int16_t(int16_t value) {
    const int16_t neg_one = (int16_t) ((int16_t) 0 - (int16_t) 1), const_zero = (int16_t) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int16_t) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int16_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int16_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int16_t) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int16_t) <= 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(int16_t),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_Type_3a__3a_type(enum  parquet::Type::type value) {
    const enum  parquet::Type::type neg_one = (enum  parquet::Type::type) ((enum  parquet::Type::type) 0 - (enum  parquet::Type::type) 1), const_zero = (enum  parquet::Type::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum  parquet::Type::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum  parquet::Type::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::Type::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum  parquet::Type::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::Type::type) <= 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(enum  parquet::Type::type),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_LogicalType_3a__3a_Type_3a__3a_type(enum  parquet::LogicalType::Type::type value) {
    const enum  parquet::LogicalType::Type::type neg_one = (enum  parquet::LogicalType::Type::type) ((enum  parquet::LogicalType::Type::type) 0 - (enum  parquet::LogicalType::Type::type) 1), const_zero = (enum  parquet::LogicalType::Type::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum  parquet::LogicalType::Type::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum  parquet::LogicalType::Type::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::LogicalType::Type::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum  parquet::LogicalType::Type::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::LogicalType::Type::type) <= 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(enum  parquet::LogicalType::Type::type),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_ConvertedType_3a__3a_type(enum  parquet::ConvertedType::type value) {
    const enum  parquet::ConvertedType::type neg_one = (enum  parquet::ConvertedType::type) ((enum  parquet::ConvertedType::type) 0 - (enum  parquet::ConvertedType::type) 1), const_zero = (enum  parquet::ConvertedType::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum  parquet::ConvertedType::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum  parquet::ConvertedType::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::ConvertedType::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum  parquet::ConvertedType::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::ConvertedType::type) <= 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(enum  parquet::ConvertedType::type),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____parquet_3a__3a_Compression_3a__3a_type(enum  parquet::Compression::type value) {
    const enum  parquet::Compression::type neg_one = (enum  parquet::Compression::type) ((enum  parquet::Compression::type) 0 - (enum  parquet::Compression::type) 1), const_zero = (enum  parquet::Compression::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum  parquet::Compression::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum  parquet::Compression::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::Compression::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum  parquet::Compression::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum  parquet::Compression::type) <= 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(enum  parquet::Compression::type),
                                     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 enum  parquet::Encoding::type __Pyx_PyInt_As_enum____parquet_3a__3a_Encoding_3a__3a_type(PyObject *x) {
    const enum  parquet::Encoding::type neg_one = (enum  parquet::Encoding::type) ((enum  parquet::Encoding::type) 0 - (enum  parquet::Encoding::type) 1), const_zero = (enum  parquet::Encoding::type) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(enum  parquet::Encoding::type) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (enum  parquet::Encoding::type) 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 (enum  parquet::Encoding::type) 0;
                case  1: __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, digit, digits[0])
                case 2:
                    if (8 * sizeof(enum  parquet::Encoding::type) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum  parquet::Encoding::type) >= 2 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) (((((enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(enum  parquet::Encoding::type) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum  parquet::Encoding::type) >= 3 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) (((((((enum  parquet::Encoding::type)digits[2]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(enum  parquet::Encoding::type) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, 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(enum  parquet::Encoding::type) >= 4 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) (((((((((enum  parquet::Encoding::type)digits[3]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[2]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)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 (enum  parquet::Encoding::type) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(enum  parquet::Encoding::type) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum  parquet::Encoding::type, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(enum  parquet::Encoding::type) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum  parquet::Encoding::type, 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 (enum  parquet::Encoding::type) 0;
                case -1: __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(enum  parquet::Encoding::type) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum  parquet::Encoding::type) - 1 > 2 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) (((enum  parquet::Encoding::type)-1)*(((((enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(enum  parquet::Encoding::type) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum  parquet::Encoding::type) - 1 > 2 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) ((((((enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(enum  parquet::Encoding::type) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum  parquet::Encoding::type) - 1 > 3 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) (((enum  parquet::Encoding::type)-1)*(((((((enum  parquet::Encoding::type)digits[2]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(enum  parquet::Encoding::type) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum  parquet::Encoding::type) - 1 > 3 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) ((((((((enum  parquet::Encoding::type)digits[2]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(enum  parquet::Encoding::type) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, 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(enum  parquet::Encoding::type) - 1 > 4 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) (((enum  parquet::Encoding::type)-1)*(((((((((enum  parquet::Encoding::type)digits[3]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[2]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(enum  parquet::Encoding::type) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum  parquet::Encoding::type, 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(enum  parquet::Encoding::type) - 1 > 4 * PyLong_SHIFT) {
                            return (enum  parquet::Encoding::type) ((((((((((enum  parquet::Encoding::type)digits[3]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[2]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[1]) << PyLong_SHIFT) | (enum  parquet::Encoding::type)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(enum  parquet::Encoding::type) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum  parquet::Encoding::type, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(enum  parquet::Encoding::type) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum  parquet::Encoding::type, 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
            enum  parquet::Encoding::type 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 (enum  parquet::Encoding::type) -1;
        }
    } else {
        enum  parquet::Encoding::type val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (enum  parquet::Encoding::type) -1;
        val = __Pyx_PyInt_As_enum____parquet_3a__3a_Encoding_3a__3a_type(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to enum  parquet::Encoding::type");
    return (enum  parquet::Encoding::type) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to enum  parquet::Encoding::type");
    return (enum  parquet::Encoding::type) -1;
}

/* CIntFromPy */
static CYTHON_INLINE int32_t __Pyx_PyInt_As_int32_t(PyObject *x) {
    const int32_t neg_one = (int32_t) ((int32_t) 0 - (int32_t) 1), const_zero = (int32_t) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(int32_t) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(int32_t, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (int32_t) 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 (int32_t) 0;
                case  1: __PYX_VERIFY_RETURN_INT(int32_t, digit, digits[0])
                case 2:
                    if (8 * sizeof(int32_t) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int32_t) >= 2 * PyLong_SHIFT) {
                            return (int32_t) (((((int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int32_t) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int32_t) >= 3 * PyLong_SHIFT) {
                            return (int32_t) (((((((int32_t)digits[2]) << PyLong_SHIFT) | (int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int32_t) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, 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(int32_t) >= 4 * PyLong_SHIFT) {
                            return (int32_t) (((((((((int32_t)digits[3]) << PyLong_SHIFT) | (int32_t)digits[2]) << PyLong_SHIFT) | (int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)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 (int32_t) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(int32_t) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int32_t, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int32_t) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int32_t, 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 (int32_t) 0;
                case -1: __PYX_VERIFY_RETURN_INT(int32_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(int32_t,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(int32_t) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int32_t) - 1 > 2 * PyLong_SHIFT) {
                            return (int32_t) (((int32_t)-1)*(((((int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(int32_t) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int32_t) - 1 > 2 * PyLong_SHIFT) {
                            return (int32_t) ((((((int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(int32_t) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int32_t) - 1 > 3 * PyLong_SHIFT) {
                            return (int32_t) (((int32_t)-1)*(((((((int32_t)digits[2]) << PyLong_SHIFT) | (int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int32_t) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int32_t) - 1 > 3 * PyLong_SHIFT) {
                            return (int32_t) ((((((((int32_t)digits[2]) << PyLong_SHIFT) | (int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(int32_t) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, 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(int32_t) - 1 > 4 * PyLong_SHIFT) {
                            return (int32_t) (((int32_t)-1)*(((((((((int32_t)digits[3]) << PyLong_SHIFT) | (int32_t)digits[2]) << PyLong_SHIFT) | (int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int32_t) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int32_t, 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(int32_t) - 1 > 4 * PyLong_SHIFT) {
                            return (int32_t) ((((((((((int32_t)digits[3]) << PyLong_SHIFT) | (int32_t)digits[2]) << PyLong_SHIFT) | (int32_t)digits[1]) << PyLong_SHIFT) | (int32_t)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(int32_t) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int32_t, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int32_t) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int32_t, 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
            int32_t 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 (int32_t) -1;
        }
    } else {
        int32_t val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (int32_t) -1;
        val = __Pyx_PyInt_As_int32_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to int32_t");
    return (int32_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to int32_t");
    return (int32_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
    const int64_t neg_one = (int64_t) ((int64_t) 0 - (int64_t) 1), const_zero = (int64_t) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(int64_t) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(int64_t, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (int64_t) 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 (int64_t) 0;
                case  1: __PYX_VERIFY_RETURN_INT(int64_t, digit, digits[0])
                case 2:
                    if (8 * sizeof(int64_t) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int64_t) >= 2 * PyLong_SHIFT) {
                            return (int64_t) (((((int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int64_t) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int64_t) >= 3 * PyLong_SHIFT) {
                            return (int64_t) (((((((int64_t)digits[2]) << PyLong_SHIFT) | (int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int64_t) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, 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(int64_t) >= 4 * PyLong_SHIFT) {
                            return (int64_t) (((((((((int64_t)digits[3]) << PyLong_SHIFT) | (int64_t)digits[2]) << PyLong_SHIFT) | (int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)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 (int64_t) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(int64_t) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int64_t, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int64_t, 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 (int64_t) 0;
                case -1: __PYX_VERIFY_RETURN_INT(int64_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(int64_t,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(int64_t) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int64_t) - 1 > 2 * PyLong_SHIFT) {
                            return (int64_t) (((int64_t)-1)*(((((int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(int64_t) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int64_t) - 1 > 2 * PyLong_SHIFT) {
                            return (int64_t) ((((((int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(int64_t) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int64_t) - 1 > 3 * PyLong_SHIFT) {
                            return (int64_t) (((int64_t)-1)*(((((((int64_t)digits[2]) << PyLong_SHIFT) | (int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int64_t) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int64_t) - 1 > 3 * PyLong_SHIFT) {
                            return (int64_t) ((((((((int64_t)digits[2]) << PyLong_SHIFT) | (int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(int64_t) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, 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(int64_t) - 1 > 4 * PyLong_SHIFT) {
                            return (int64_t) (((int64_t)-1)*(((((((((int64_t)digits[3]) << PyLong_SHIFT) | (int64_t)digits[2]) << PyLong_SHIFT) | (int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int64_t) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int64_t, 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(int64_t) - 1 > 4 * PyLong_SHIFT) {
                            return (int64_t) ((((((((((int64_t)digits[3]) << PyLong_SHIFT) | (int64_t)digits[2]) << PyLong_SHIFT) | (int64_t)digits[1]) << PyLong_SHIFT) | (int64_t)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(int64_t) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int64_t, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int64_t, 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
            int64_t 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 (int64_t) -1;
        }
    } else {
        int64_t val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (int64_t) -1;
        val = __Pyx_PyInt_As_int64_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to int64_t");
    return (int64_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to int64_t");
    return (int64_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
    const size_t neg_one = (size_t) ((size_t) 0 - (size_t) 1), const_zero = (size_t) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(size_t) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(size_t, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (size_t) 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 (size_t) 0;
                case  1: __PYX_VERIFY_RETURN_INT(size_t, digit, digits[0])
                case 2:
                    if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(size_t) >= 2 * PyLong_SHIFT) {
                            return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(size_t) >= 3 * PyLong_SHIFT) {
                            return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, 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(size_t) >= 4 * PyLong_SHIFT) {
                            return (size_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
#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 (size_t) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(size_t) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, 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 (size_t) 0;
                case -1: __PYX_VERIFY_RETURN_INT(size_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(size_t,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
                            return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
                            return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
                            return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
                            return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, 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(size_t) - 1 > 4 * PyLong_SHIFT) {
                            return (size_t) (((size_t)-1)*(((((((((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(size_t) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(size_t, 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(size_t) - 1 > 4 * PyLong_SHIFT) {
                            return (size_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
            if (sizeof(size_t) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(size_t) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, 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
            size_t 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 (size_t) -1;
        }
    } else {
        size_t val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (size_t) -1;
        val = __Pyx_PyInt_As_size_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to size_t");
    return (size_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to size_t");
    return (size_t) -1;
}

/* 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);
    }
}

/* 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;
}

/* FunctionImport */
#ifndef __PYX_HAVE_RT_ImportFunction
#define __PYX_HAVE_RT_ImportFunction
static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    d = PyObject_GetAttrString(module, (char *)"__pyx_capi__");
    if (!d)
        goto bad;
    cobj = PyDict_GetItemString(d, funcname);
    if (!cobj) {
        PyErr_Format(PyExc_ImportError,
            "%.200s does not export expected C function %.200s",
                PyModule_GetName(module), funcname);
        goto bad;
    }
#if PY_VERSION_HEX >= 0x02070000
    if (!PyCapsule_IsValid(cobj, sig)) {
        PyErr_Format(PyExc_TypeError,
            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj));
        goto bad;
    }
    tmp.p = PyCapsule_GetPointer(cobj, sig);
#else
    {const char *desc, *s1, *s2;
    desc = (const char *)PyCObject_GetDesc(cobj);
    if (!desc)
        goto bad;
    s1 = desc; s2 = sig;
    while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
    if (*s1 != *s2) {
        PyErr_Format(PyExc_TypeError,
            "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), funcname, sig, desc);
        goto bad;
    }
    tmp.p = PyCObject_AsVoidPtr(cobj);}
#endif
    *f = tmp.fp;
    if (!(*f))
        goto bad;
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(d);
    return -1;
}
#endif

/* 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 */
