/* Generated by Cython 0.29.15 */

#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_15"
#define CYTHON_HEX_VERSION 0x001D0FF0
#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___dataset
#define __PYX_HAVE_API__pyarrow___dataset
/* Early includes */
#include <string.h>
#include <stdio.h>
#include "pythread.h"
#include "ios"
#include "new"
#include "stdexcept"
#include "typeinfo"
#include <stdint.h>
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include "datetime.h"

    #include <type_traits>
    #include <utility>
    namespace cymove {
    template <typename T>
    inline typename std::remove_reference<T>::type&& cymove(T& t) {
        return std::move(t);
    }
    template <typename T>
    inline typename std::remove_reference<T>::type&& cymove(T&& t) {
        return std::move(t);
    }
    }  // namespace cymove
    
#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/io_util.h"
#include "arrow/util/iterator.h"
#include "arrow/util/thread_pool.h"
#include "arrow/array/concatenate.h"
#include <functional>
#include "arrow/filesystem/api.h"
#include "arrow/dataset/api.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\\_dataset.pyx",
  "stringsource",
  "datetime.pxd",
  "type.pxd",
  "bool.pxd",
  "complex.pxd",
  "pyarrow\\lib.pxd",
  "pyarrow\\_fs.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_MapType;
struct __pyx_obj_7pyarrow_3lib_FixedSizeListType;
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_DurationType;
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_MapValue;
struct __pyx_obj_7pyarrow_3lib_FixedSizeListValue;
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_SparseCSRMatrix;
struct __pyx_obj_7pyarrow_3lib_SparseCOOTensor;
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_MapArray;
struct __pyx_obj_7pyarrow_3lib_FixedSizeListArray;
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_3lib_CastOptions;
struct __pyx_obj_7pyarrow_3_fs_FileStats;
struct __pyx_obj_7pyarrow_3_fs_FileSelector;
struct __pyx_obj_7pyarrow_3_fs_FileSystem;
struct __pyx_obj_7pyarrow_3_fs_LocalFileSystem;
struct __pyx_obj_7pyarrow_3_fs_SubTreeFileSystem;
struct __pyx_obj_7pyarrow_3_fs__MockFileSystem;
struct __pyx_obj_7pyarrow_8_dataset_FileFormat;
struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat;
struct __pyx_obj_7pyarrow_8_dataset_Partitioning;
struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory;
struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning;
struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning;
struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions;
struct __pyx_obj_7pyarrow_8_dataset_SourceFactory;
struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory;
struct __pyx_obj_7pyarrow_8_dataset_Source;
struct __pyx_obj_7pyarrow_8_dataset_TreeSource;
struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource;
struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory;
struct __pyx_obj_7pyarrow_8_dataset_Dataset;
struct __pyx_obj_7pyarrow_8_dataset_ScanTask;
struct __pyx_obj_7pyarrow_8_dataset_Scanner;
struct __pyx_obj_7pyarrow_8_dataset_Expression;
struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression;
struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression;
struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression;
struct __pyx_obj_7pyarrow_8_dataset_FieldExpression;
struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression;
struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression;
struct __pyx_obj_7pyarrow_8_dataset_CastExpression;
struct __pyx_obj_7pyarrow_8_dataset_InExpression;
struct __pyx_obj_7pyarrow_8_dataset_NotExpression;
struct __pyx_obj_7pyarrow_8_dataset_AndExpression;
struct __pyx_obj_7pyarrow_8_dataset_OrExpression;
struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches;
struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute;
struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan;
struct __pyx_obj___Pyx_EnumMeta;
struct __pyx_opt_args_7pyarrow_3lib_ensure_type;

/* "pyarrow/lib.pxd":553
 * 
 * # 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/_fs.pxd":30
 * 
 * 
 * cpdef enum FileType:             # <<<<<<<<<<<<<<
 *     NonExistent = <int8_t> CFileType_NonExistent
 *     Unknown = <int8_t> CFileType_Unknown
 */
enum __pyx_t_7pyarrow_3_fs_FileType {

  /* "pyarrow/_fs.pxd":34
 *     Unknown = <int8_t> CFileType_Unknown
 *     File = <int8_t> CFileType_File
 *     Directory = <int8_t> CFileType_Directory             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_e_7pyarrow_3_fs_NonExistent = ((int8_t)arrow::fs::FileType::NonExistent),
  __pyx_e_7pyarrow_3_fs_Unknown = ((int8_t)arrow::fs::FileType::Unknown),
  __pyx_e_7pyarrow_3_fs_File = ((int8_t)arrow::fs::FileType::File),
  __pyx_e_7pyarrow_3_fs_Directory = ((int8_t)arrow::fs::FileType::Directory)
};

/* "pyarrow/_dataset.pyx":1309
 * 
 * 
 * cpdef enum CompareOperator:             # <<<<<<<<<<<<<<
 *     Equal = <int8_t> CCompareOperator_EQUAL
 *     NotEqual = <int8_t> CCompareOperator_NOT_EQUAL
 */
enum __pyx_t_7pyarrow_8_dataset_CompareOperator {

  /* "pyarrow/_dataset.pyx":1315
 *     GreaterEqual = <int8_t> CCompareOperator_GREATER_EQUAL
 *     Less = <int8_t> CCompareOperator_LESS
 *     LessEqual = <int8_t> CCompareOperator_LESS_EQUAL             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_e_7pyarrow_8_dataset_Equal = ((int8_t)arrow::compute::CompareOperator::EQUAL),
  __pyx_e_7pyarrow_8_dataset_NotEqual = ((int8_t)arrow::compute::CompareOperator::NOT_EQUAL),
  __pyx_e_7pyarrow_8_dataset_Greater = ((int8_t)arrow::compute::CompareOperator::GREATER),
  __pyx_e_7pyarrow_8_dataset_GreaterEqual = ((int8_t)arrow::compute::CompareOperator::GREATER_EQUAL),
  __pyx_e_7pyarrow_8_dataset_Less = ((int8_t)arrow::compute::CompareOperator::LESS),
  __pyx_e_7pyarrow_8_dataset_LessEqual = ((int8_t)arrow::compute::CompareOperator::LESS_EQUAL)
};

/* "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 MapType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CMapType* map_type
 */
struct __pyx_obj_7pyarrow_3lib_MapType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::MapType const *map_type;
};


/* "pyarrow/lib.pxd":77
 * 
 * 
 * cdef class FixedSizeListType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CFixedSizeListType* list_type
 */
struct __pyx_obj_7pyarrow_3lib_FixedSizeListType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::FixedSizeListType const *list_type;
};


/* "pyarrow/lib.pxd":82
 * 
 * 
 * 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":90
 * 
 * 
 * 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":98
 * 
 * 
 * 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":103
 * 
 * 
 * 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":108
 * 
 * 
 * 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":113
 * 
 * 
 * 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":118
 * 
 * 
 * cdef class DurationType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CDurationType* duration_type
 */
struct __pyx_obj_7pyarrow_3lib_DurationType {
  struct __pyx_obj_7pyarrow_3lib_DataType __pyx_base;
   arrow::DurationType const *duration_type;
};


/* "pyarrow/lib.pxd":123
 * 
 * 
 * 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":128
 * 
 * 
 * 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":133
 * 
 * 
 * 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":138
 * 
 * 
 * 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":143
 * 
 * 
 * cdef class PyExtensionType(ExtensionType):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_PyExtensionType {
  struct __pyx_obj_7pyarrow_3lib_ExtensionType __pyx_base;
};


/* "pyarrow/lib.pxd":147
 * 
 * 
 * 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":158
 * 
 * 
 * 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":167
 * 
 * 
 * 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":172
 * 
 * 
 * cdef class NAType(Scalar):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_NAType {
  struct __pyx_obj_7pyarrow_3lib_Scalar __pyx_base;
};


/* "pyarrow/lib.pxd":176
 * 
 * 
 * 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":186
 *     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":192
 *     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":196
 * 
 * 
 * cdef class Int64Value(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_Int64Value {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
};


/* "pyarrow/lib.pxd":200
 * 
 * 
 * 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":211
 * 
 * 
 * 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":222
 * 
 * 
 * cdef class MapValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType key_type
 */
struct __pyx_obj_7pyarrow_3lib_MapValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
  struct __pyx_obj_7pyarrow_3lib_DataType *key_type;
  struct __pyx_obj_7pyarrow_3lib_DataType *item_type;
   arrow::MapArray *ap;
};


/* "pyarrow/lib.pxd":234
 * 
 * 
 * cdef class FixedSizeListValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType value_type
 */
struct __pyx_obj_7pyarrow_3lib_FixedSizeListValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
  struct __pyx_obj_7pyarrow_3lib_DataType *value_type;
   arrow::FixedSizeListArray *ap;
};


/* "pyarrow/lib.pxd":245
 * 
 * 
 * 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":250
 * 
 * 
 * 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":258
 * 
 * 
 * cdef class StringValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_StringValue {
  struct __pyx_obj_7pyarrow_3lib_ArrayValue __pyx_base;
};


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


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


/* "pyarrow/lib.pxd":270
 * 
 * 
 * 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":286
 * 
 * 
 * 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":297
 * 
 * 
 * cdef class SparseCSRMatrix:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseCSRMatrix] sp_sparse_tensor
 */
struct __pyx_obj_7pyarrow_3lib_SparseCSRMatrix {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_SparseCSRMatrix *__pyx_vtab;
  std::shared_ptr< arrow::SparseCSRMatrix>  sp_sparse_tensor;
   arrow::SparseCSRMatrix *stp;
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
};


/* "pyarrow/lib.pxd":308
 * 
 * 
 * cdef class SparseCOOTensor:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseCOOTensor] sp_sparse_tensor
 */
struct __pyx_obj_7pyarrow_3lib_SparseCOOTensor {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_SparseCOOTensor *__pyx_vtab;
  std::shared_ptr< arrow::SparseCOOTensor>  sp_sparse_tensor;
   arrow::SparseCOOTensor *stp;
  struct __pyx_obj_7pyarrow_3lib_DataType *type;
};


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


/* "pyarrow/lib.pxd":403
 * 
 * 
 * cdef class MapArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_MapArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":407
 * 
 * 
 * cdef class FixedSizeListArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_FixedSizeListArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


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


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


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


/* "pyarrow/lib.pxd":423
 * 
 * 
 * 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":428
 * 
 * 
 * cdef class ExtensionArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_ExtensionArray {
  struct __pyx_obj_7pyarrow_3lib_Array __pyx_base;
};


/* "pyarrow/lib.pxd":439
 * 
 * 
 * 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":452
 * 
 * 
 * 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":460
 * 
 * 
 * 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":469
 * 
 * 
 * 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":479
 * 
 * 
 * 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":484
 * 
 * 
 * cdef class NativeFile:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CInputStream] 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":508
 * 
 * 
 * cdef class BufferedInputStream(NativeFile):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
struct __pyx_obj_7pyarrow_3lib_BufferedInputStream {
  struct __pyx_obj_7pyarrow_3lib_NativeFile __pyx_base;
};


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


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


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


/* "pyarrow/lib.pxd":524
 * 
 * 
 * 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":529
 * 
 * 
 * cdef class _CRecordBatchReader:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CRecordBatchReader] reader
 */
struct __pyx_obj_7pyarrow_3lib__CRecordBatchReader {
  PyObject_HEAD
  std::shared_ptr< arrow::RecordBatchReader>  reader;
};


/* "pyarrow/lib.pxd":534
 * 
 * 
 * cdef class CastOptions:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CCastOptions options
 */
struct __pyx_obj_7pyarrow_3lib_CastOptions {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3lib_CastOptions *__pyx_vtab;
   arrow::compute::CastOptions options;
};


/* "pyarrow/_fs.pxd":37
 * 
 * 
 * cdef class FileStats:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CFileStats stats
 */
struct __pyx_obj_7pyarrow_3_fs_FileStats {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3_fs_FileStats *__pyx_vtab;
  arrow::fs::FileStats stats;
};


/* "pyarrow/_fs.pxd":47
 * 
 * 
 * cdef class FileSelector:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CFileSelector selector
 */
struct __pyx_obj_7pyarrow_3_fs_FileSelector {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3_fs_FileSelector *__pyx_vtab;
  arrow::fs::FileSelector selector;
};


/* "pyarrow/_fs.pxd":54
 * 
 * 
 * cdef class FileSystem:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CFileSystem] wrapped
 */
struct __pyx_obj_7pyarrow_3_fs_FileSystem {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem *__pyx_vtab;
  std::shared_ptr<arrow::fs::FileSystem>  wrapped;
  arrow::fs::FileSystem *fs;
};


/* "pyarrow/_fs.pxd":67
 * 
 * 
 * cdef class LocalFileSystem(FileSystem):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CLocalFileSystem* localfs
 */
struct __pyx_obj_7pyarrow_3_fs_LocalFileSystem {
  struct __pyx_obj_7pyarrow_3_fs_FileSystem __pyx_base;
  arrow::fs::LocalFileSystem *localfs;
};


/* "pyarrow/_fs.pxd":74
 * 
 * 
 * cdef class SubTreeFileSystem(FileSystem):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CSubTreeFileSystem* subtreefs
 */
struct __pyx_obj_7pyarrow_3_fs_SubTreeFileSystem {
  struct __pyx_obj_7pyarrow_3_fs_FileSystem __pyx_base;
  arrow::fs::SubTreeFileSystem *subtreefs;
};


/* "pyarrow/_fs.pxd":81
 * 
 * 
 * cdef class _MockFileSystem(FileSystem):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CMockFileSystem* mockfs
 */
struct __pyx_obj_7pyarrow_3_fs__MockFileSystem {
  struct __pyx_obj_7pyarrow_3_fs_FileSystem __pyx_base;
  arrow::fs::internal::MockFileSystem *mockfs;
};


/* "pyarrow/_dataset.pyx":47
 * 
 * 
 * cdef class FileFormat:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */
struct __pyx_obj_7pyarrow_8_dataset_FileFormat {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_FileFormat *__pyx_vtab;
  std::shared_ptr<arrow::dataset::FileFormat>  wrapped;
  arrow::dataset::FileFormat *format;
};


/* "pyarrow/_dataset.pyx":77
 * 
 * 
 * cdef class ParquetFileFormat(FileFormat):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self):
 */
struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat {
  struct __pyx_obj_7pyarrow_8_dataset_FileFormat __pyx_base;
};


/* "pyarrow/_dataset.pyx":83
 * 
 * 
 * cdef class Partitioning:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */
struct __pyx_obj_7pyarrow_8_dataset_Partitioning {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning *__pyx_vtab;
  std::shared_ptr<arrow::dataset::Partitioning>  wrapped;
  arrow::dataset::Partitioning *partitioning;
};


/* "pyarrow/_dataset.pyx":125
 * 
 * 
 * cdef class PartitioningFactory:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */
struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_PartitioningFactory *__pyx_vtab;
  std::shared_ptr<arrow::dataset::PartitioningFactory>  wrapped;
  arrow::dataset::PartitioningFactory *factory;
};


/* "pyarrow/_dataset.pyx":150
 * 
 * 
 * cdef class DirectoryPartitioning(Partitioning):             # <<<<<<<<<<<<<<
 *     """
 *     A Partitioning based on a specified Schema.
 */
struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning {
  struct __pyx_obj_7pyarrow_8_dataset_Partitioning __pyx_base;
  arrow::dataset::DirectoryPartitioning *directory_partitioning;
};


/* "pyarrow/_dataset.pyx":215
 * 
 * 
 * cdef class HivePartitioning(Partitioning):             # <<<<<<<<<<<<<<
 *     """
 *     A Partitioning for "/$key=$value/" nested directories as found in
 */
struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning {
  struct __pyx_obj_7pyarrow_8_dataset_Partitioning __pyx_base;
  arrow::dataset::HivePartitioning *hive_partitioning;
};


/* "pyarrow/_dataset.pyx":279
 * 
 * 
 * cdef class FileSystemFactoryOptions:             # <<<<<<<<<<<<<<
 *     """
 *     Influences the discovery of filesystem paths.
 */
struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_vtab;
  arrow::dataset::FileSystemFactoryOptions options;
};


/* "pyarrow/_dataset.pyx":384
 * 
 * 
 * cdef class SourceFactory:             # <<<<<<<<<<<<<<
 *     """
 *     SourceFactory is used to create a Source, inspect the Schema
 */
struct __pyx_obj_7pyarrow_8_dataset_SourceFactory {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_SourceFactory *__pyx_vtab;
  std::shared_ptr<arrow::dataset::SourceFactory>  wrapped;
  arrow::dataset::SourceFactory *factory;
};


/* "pyarrow/_dataset.pyx":474
 * 
 * 
 * cdef class FileSystemSourceFactory(SourceFactory):             # <<<<<<<<<<<<<<
 *     """
 *     Create a SourceFactory from a list of paths with schema inspection.
 */
struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory {
  struct __pyx_obj_7pyarrow_8_dataset_SourceFactory __pyx_base;
  arrow::dataset::FileSystemSourceFactory *filesystem_factory;
};


/* "pyarrow/_dataset.pyx":538
 * 
 * 
 * cdef class Source:             # <<<<<<<<<<<<<<
 *     """Basic component of a Dataset which yields zero or more fragments.  """
 * 
 */
struct __pyx_obj_7pyarrow_8_dataset_Source {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Source *__pyx_vtab;
  std::shared_ptr<arrow::dataset::Source>  wrapped;
  arrow::dataset::Source *source;
};


/* "pyarrow/_dataset.pyx":591
 * 
 * 
 * cdef class TreeSource(Source):             # <<<<<<<<<<<<<<
 *     """A Source created from other source objects"""
 * 
 */
struct __pyx_obj_7pyarrow_8_dataset_TreeSource {
  struct __pyx_obj_7pyarrow_8_dataset_Source __pyx_base;
  arrow::dataset::TreeSource *tree_source;
};


/* "pyarrow/_dataset.pyx":615
 * 
 * 
 * cdef class FileSystemSource(Source):             # <<<<<<<<<<<<<<
 *     """A Source created from a set of files on a particular filesystem"""
 * 
 */
struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource {
  struct __pyx_obj_7pyarrow_8_dataset_Source __pyx_base;
  arrow::dataset::FileSystemSource *filesystem_source;
};


/* "pyarrow/_dataset.pyx":680
 * 
 * 
 * cdef class DatasetFactory:             # <<<<<<<<<<<<<<
 *     """
 *     Provides a way to inspect/discover a Dataset's expected schema before
 */
struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_DatasetFactory *__pyx_vtab;
  std::shared_ptr<arrow::dataset::DatasetFactory>  wrapped;
  arrow::dataset::DatasetFactory *factory;
};


/* "pyarrow/_dataset.pyx":744
 * 
 * 
 * cdef class Dataset:             # <<<<<<<<<<<<<<
 *     """
 *     Collection of data fragments coming from possibly multiple sources.
 */
struct __pyx_obj_7pyarrow_8_dataset_Dataset {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Dataset *__pyx_vtab;
  std::shared_ptr<arrow::dataset::Dataset>  wrapped;
  arrow::dataset::Dataset *dataset;
};


/* "pyarrow/_dataset.pyx":919
 * 
 * 
 * cdef class ScanTask:             # <<<<<<<<<<<<<<
 *     """Read record batches from a range of a single data fragment.
 * 
 */
struct __pyx_obj_7pyarrow_8_dataset_ScanTask {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_ScanTask *__pyx_vtab;
  std::shared_ptr< arrow::dataset::ScanTask>  wrapped;
   arrow::dataset::ScanTask *task;
};


/* "pyarrow/_dataset.pyx":971
 * 
 * 
 * cdef class Scanner:             # <<<<<<<<<<<<<<
 *     """A materialized scan operation with context and options bound.
 * 
 */
struct __pyx_obj_7pyarrow_8_dataset_Scanner {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Scanner *__pyx_vtab;
  std::shared_ptr<arrow::dataset::Scanner>  wrapped;
  arrow::dataset::Scanner *scanner;
};


/* "pyarrow/_dataset.pyx":1118
 * 
 * 
 * cdef class Expression:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */
struct __pyx_obj_7pyarrow_8_dataset_Expression {
  PyObject_HEAD
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression *__pyx_vtab;
  std::shared_ptr<arrow::dataset::Expression>  wrapped;
  arrow::dataset::Expression *expr;
};


/* "pyarrow/_dataset.pyx":1236
 * 
 * 
 * cdef class UnaryExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CUnaryExpression* unary
 */
struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression {
  struct __pyx_obj_7pyarrow_8_dataset_Expression __pyx_base;
  arrow::dataset::UnaryExpression *unary;
};


/* "pyarrow/_dataset.pyx":1245
 * 
 * 
 * cdef class BinaryExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CBinaryExpression* binary
 */
struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression {
  struct __pyx_obj_7pyarrow_8_dataset_Expression __pyx_base;
  arrow::dataset::BinaryExpression *binary;
};


/* "pyarrow/_dataset.pyx":1262
 * 
 * 
 * cdef class ScalarExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CScalarExpression* scalar
 */
struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression {
  struct __pyx_obj_7pyarrow_8_dataset_Expression __pyx_base;
  arrow::dataset::ScalarExpression *scalar;
};


/* "pyarrow/_dataset.pyx":1290
 * 
 * 
 * cdef class FieldExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CFieldExpression* scalar
 */
struct __pyx_obj_7pyarrow_8_dataset_FieldExpression {
  struct __pyx_obj_7pyarrow_8_dataset_Expression __pyx_base;
  arrow::dataset::FieldExpression *scalar;
};


/* "pyarrow/_dataset.pyx":1318
 * 
 * 
 * cdef class ComparisonExpression(BinaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CComparisonExpression* comparison
 */
struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression {
  struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression __pyx_base;
  arrow::dataset::ComparisonExpression *comparison;
};


/* "pyarrow/_dataset.pyx":1342
 * 
 * 
 * cdef class IsValidExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None):
 */
struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression {
  struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};


/* "pyarrow/_dataset.pyx":1350
 * 
 * 
 * cdef class CastExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None, DataType to not None,
 */
struct __pyx_obj_7pyarrow_8_dataset_CastExpression {
  struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};


/* "pyarrow/_dataset.pyx":1368
 * 
 * 
 * cdef class InExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None, Array haystack not None):
 */
struct __pyx_obj_7pyarrow_8_dataset_InExpression {
  struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};


/* "pyarrow/_dataset.pyx":1378
 * 
 * 
 * cdef class NotExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None):
 */
struct __pyx_obj_7pyarrow_8_dataset_NotExpression {
  struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};


/* "pyarrow/_dataset.pyx":1386
 * 
 * 
 * cdef class AndExpression(BinaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression left not None, Expression right not None,
 */
struct __pyx_obj_7pyarrow_8_dataset_AndExpression {
  struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression __pyx_base;
};


/* "pyarrow/_dataset.pyx":1400
 * 
 * 
 * cdef class OrExpression(BinaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression left not None, Expression right not None,
 */
struct __pyx_obj_7pyarrow_8_dataset_OrExpression {
  struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression __pyx_base;
};


/* "pyarrow/_dataset.pyx":832
 *         return scanner.scan()
 * 
 *     def to_batches(self, columns=None, filter=None,             # <<<<<<<<<<<<<<
 *                    MemoryPool memory_pool=None):
 *         """Read the dataset as materialized record batches.
 */
struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches {
  PyObject_HEAD
  PyObject *__pyx_v_batch;
  PyObject *__pyx_v_columns;
  PyObject *__pyx_v_filter;
  struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool;
  struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_scanner;
  struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self;
  PyObject *__pyx_v_task;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
};


/* "pyarrow/_dataset.pyx":945
 *         return self.wrapped
 * 
 *     def execute(self):             # <<<<<<<<<<<<<<
 *         """Iterate through sequence of materialized record batches.
 * 
 */
struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute {
  PyObject_HEAD
  arrow::RecordBatchIterator __pyx_v_iterator;
  std::shared_ptr< arrow::RecordBatch>  __pyx_v_record_batch;
  struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self;
  PyThreadState *__pyx_t_0;
  PyGILState_STATE __pyx_t_1;
};


/* "pyarrow/_dataset.pyx":1054
 *         return self
 * 
 *     def scan(self):             # <<<<<<<<<<<<<<
 *         """Returns a stream of ScanTasks
 * 
 */
struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan {
  PyObject_HEAD
  arrow::dataset::ScanTaskIterator __pyx_v_iterator;
  struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self;
  std::shared_ptr< arrow::dataset::ScanTask>  __pyx_v_task;
};


/* "EnumBase":15
 * 
 * @cython.internal
 * cdef class __Pyx_EnumMeta(type):             # <<<<<<<<<<<<<<
 *     def __init__(cls, name, parents, dct):
 *         type.__init__(cls, name, parents, dct)
 */
struct __pyx_obj___Pyx_EnumMeta {
  PyHeapTypeObject __pyx_base;
};



/* "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 MapType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CMapType* map_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_MapType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_MapType *__pyx_vtabptr_7pyarrow_3lib_MapType;


/* "pyarrow/lib.pxd":77
 * 
 * 
 * cdef class FixedSizeListType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CFixedSizeListType* list_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListType *__pyx_vtabptr_7pyarrow_3lib_FixedSizeListType;


/* "pyarrow/lib.pxd":82
 * 
 * 
 * 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":98
 * 
 * 
 * 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":103
 * 
 * 
 * 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":108
 * 
 * 
 * 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":113
 * 
 * 
 * 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":118
 * 
 * 
 * cdef class DurationType(DataType):             # <<<<<<<<<<<<<<
 *     cdef:
 *         const CDurationType* duration_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_DurationType {
  struct __pyx_vtabstruct_7pyarrow_3lib_DataType __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_DurationType *__pyx_vtabptr_7pyarrow_3lib_DurationType;


/* "pyarrow/lib.pxd":123
 * 
 * 
 * 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":128
 * 
 * 
 * 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":133
 * 
 * 
 * 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":138
 * 
 * 
 * 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":143
 * 
 * 
 * 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":147
 * 
 * 
 * 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":158
 * 
 * 
 * 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":176
 * 
 * 
 * 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":186
 *     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":192
 *     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":196
 * 
 * 
 * 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":200
 * 
 * 
 * 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":211
 * 
 * 
 * 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":222
 * 
 * 
 * cdef class MapValue(ArrayValue):             # <<<<<<<<<<<<<<
 *     cdef readonly:
 *         DataType key_type
 */

struct __pyx_vtabstruct_7pyarrow_3lib_MapValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_MapValue *, int64_t);
  int64_t (*length)(struct __pyx_obj_7pyarrow_3lib_MapValue *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_MapValue *__pyx_vtabptr_7pyarrow_3lib_MapValue;


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

struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListValue {
  struct __pyx_vtabstruct_7pyarrow_3lib_ArrayValue __pyx_base;
  PyObject *(*getitem)(struct __pyx_obj_7pyarrow_3lib_FixedSizeListValue *, int64_t);
  int64_t (*length)(struct __pyx_obj_7pyarrow_3lib_FixedSizeListValue *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListValue *__pyx_vtabptr_7pyarrow_3lib_FixedSizeListValue;


/* "pyarrow/lib.pxd":245
 * 
 * 
 * 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":250
 * 
 * 
 * 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":258
 * 
 * 
 * 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":262
 * 
 * 
 * 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":270
 * 
 * 
 * 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":286
 * 
 * 
 * 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":297
 * 
 * 
 * cdef class SparseCSRMatrix:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseCSRMatrix] sp_sparse_tensor
 */

struct __pyx_vtabstruct_7pyarrow_3lib_SparseCSRMatrix {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_SparseCSRMatrix *, std::shared_ptr< arrow::SparseCSRMatrix>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_SparseCSRMatrix *__pyx_vtabptr_7pyarrow_3lib_SparseCSRMatrix;


/* "pyarrow/lib.pxd":308
 * 
 * 
 * cdef class SparseCOOTensor:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CSparseCOOTensor] sp_sparse_tensor
 */

struct __pyx_vtabstruct_7pyarrow_3lib_SparseCOOTensor {
  void (*init)(struct __pyx_obj_7pyarrow_3lib_SparseCOOTensor *, std::shared_ptr< arrow::SparseCOOTensor>  const &);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_SparseCOOTensor *__pyx_vtabptr_7pyarrow_3lib_SparseCOOTensor;


/* "pyarrow/lib.pxd":319
 * 
 * 
 * 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":323
 * 
 * 
 * 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":327
 * 
 * 
 * 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":331
 * 
 * 
 * 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":335
 * 
 * 
 * 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":339
 * 
 * 
 * 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":343
 * 
 * 
 * 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":347
 * 
 * 
 * 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":351
 * 
 * 
 * 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":355
 * 
 * 
 * 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":359
 * 
 * 
 * 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":363
 * 
 * 
 * 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":367
 * 
 * 
 * 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":371
 * 
 * 
 * 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":375
 * 
 * 
 * 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":379
 * 
 * 
 * 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":383
 * 
 * 
 * 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":387
 * 
 * 
 * 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":391
 * 
 * 
 * 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":395
 * 
 * 
 * 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":399
 * 
 * 
 * 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":403
 * 
 * 
 * cdef class MapArray(Array):             # <<<<<<<<<<<<<<
 *     pass
 * 
 */

struct __pyx_vtabstruct_7pyarrow_3lib_MapArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_MapArray *__pyx_vtabptr_7pyarrow_3lib_MapArray;


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

struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListArray {
  struct __pyx_vtabstruct_7pyarrow_3lib_Array __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListArray *__pyx_vtabptr_7pyarrow_3lib_FixedSizeListArray;


/* "pyarrow/lib.pxd":411
 * 
 * 
 * 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":415
 * 
 * 
 * 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":419
 * 
 * 
 * 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":423
 * 
 * 
 * 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":428
 * 
 * 
 * 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":439
 * 
 * 
 * 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":452
 * 
 * 
 * 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":460
 * 
 * 
 * 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":469
 * 
 * 
 * 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":479
 * 
 * 
 * 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":484
 * 
 * 
 * cdef class NativeFile:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CInputStream] 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":508
 * 
 * 
 * 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":512
 * 
 * 
 * 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":516
 * 
 * 
 * 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":520
 * 
 * 
 * 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/lib.pxd":534
 * 
 * 
 * cdef class CastOptions:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CCastOptions options
 */

struct __pyx_vtabstruct_7pyarrow_3lib_CastOptions {
  PyObject *(*wrap)( arrow::compute::CastOptions);
   arrow::compute::CastOptions (*unwrap)(struct __pyx_obj_7pyarrow_3lib_CastOptions *);
};
static struct __pyx_vtabstruct_7pyarrow_3lib_CastOptions *__pyx_vtabptr_7pyarrow_3lib_CastOptions;


/* "pyarrow/_fs.pxd":37
 * 
 * 
 * cdef class FileStats:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CFileStats stats
 */

struct __pyx_vtabstruct_7pyarrow_3_fs_FileStats {
  PyObject *(*wrap)(arrow::fs::FileStats);
  arrow::fs::FileStats (*unwrap)(struct __pyx_obj_7pyarrow_3_fs_FileStats *);
};
static struct __pyx_vtabstruct_7pyarrow_3_fs_FileStats *__pyx_vtabptr_7pyarrow_3_fs_FileStats;


/* "pyarrow/_fs.pxd":47
 * 
 * 
 * cdef class FileSelector:             # <<<<<<<<<<<<<<
 *     cdef:
 *         CFileSelector selector
 */

struct __pyx_vtabstruct_7pyarrow_3_fs_FileSelector {
  arrow::fs::FileSelector (*unwrap)(struct __pyx_obj_7pyarrow_3_fs_FileSelector *);
};
static struct __pyx_vtabstruct_7pyarrow_3_fs_FileSelector *__pyx_vtabptr_7pyarrow_3_fs_FileSelector;


/* "pyarrow/_fs.pxd":54
 * 
 * 
 * cdef class FileSystem:             # <<<<<<<<<<<<<<
 *     cdef:
 *         shared_ptr[CFileSystem] wrapped
 */

struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_3_fs_FileSystem *, std::shared_ptr<arrow::fs::FileSystem>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::fs::FileSystem>  &);
  std::shared_ptr<arrow::fs::FileSystem>  (*unwrap)(struct __pyx_obj_7pyarrow_3_fs_FileSystem *);
};
static struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem *__pyx_vtabptr_7pyarrow_3_fs_FileSystem;


/* "pyarrow/_fs.pxd":67
 * 
 * 
 * cdef class LocalFileSystem(FileSystem):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CLocalFileSystem* localfs
 */

struct __pyx_vtabstruct_7pyarrow_3_fs_LocalFileSystem {
  struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3_fs_LocalFileSystem *__pyx_vtabptr_7pyarrow_3_fs_LocalFileSystem;


/* "pyarrow/_fs.pxd":74
 * 
 * 
 * cdef class SubTreeFileSystem(FileSystem):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CSubTreeFileSystem* subtreefs
 */

struct __pyx_vtabstruct_7pyarrow_3_fs_SubTreeFileSystem {
  struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3_fs_SubTreeFileSystem *__pyx_vtabptr_7pyarrow_3_fs_SubTreeFileSystem;


/* "pyarrow/_fs.pxd":81
 * 
 * 
 * cdef class _MockFileSystem(FileSystem):             # <<<<<<<<<<<<<<
 *     cdef:
 *         CMockFileSystem* mockfs
 */

struct __pyx_vtabstruct_7pyarrow_3_fs__MockFileSystem {
  struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_3_fs__MockFileSystem *__pyx_vtabptr_7pyarrow_3_fs__MockFileSystem;


/* "pyarrow/_dataset.pyx":47
 * 
 * 
 * cdef class FileFormat:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_FileFormat {
  void (*init)(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *, std::shared_ptr<arrow::dataset::FileFormat>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::FileFormat>  &);
  std::shared_ptr<arrow::dataset::FileFormat>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_FileFormat *__pyx_vtabptr_7pyarrow_8_dataset_FileFormat;
static CYTHON_INLINE std::shared_ptr<arrow::dataset::FileFormat>  __pyx_f_7pyarrow_8_dataset_10FileFormat_unwrap(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *);


/* "pyarrow/_dataset.pyx":77
 * 
 * 
 * cdef class ParquetFileFormat(FileFormat):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self):
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_ParquetFileFormat {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_FileFormat __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_ParquetFileFormat *__pyx_vtabptr_7pyarrow_8_dataset_ParquetFileFormat;


/* "pyarrow/_dataset.pyx":83
 * 
 * 
 * cdef class Partitioning:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *, std::shared_ptr<arrow::dataset::Partitioning>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::Partitioning>  const &);
  std::shared_ptr<arrow::dataset::Partitioning>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning *__pyx_vtabptr_7pyarrow_8_dataset_Partitioning;
static CYTHON_INLINE std::shared_ptr<arrow::dataset::Partitioning>  __pyx_f_7pyarrow_8_dataset_12Partitioning_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *);


/* "pyarrow/_dataset.pyx":125
 * 
 * 
 * cdef class PartitioningFactory:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_PartitioningFactory {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *, std::shared_ptr<arrow::dataset::PartitioningFactory>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::PartitioningFactory>  const &);
  std::shared_ptr<arrow::dataset::PartitioningFactory>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_PartitioningFactory *__pyx_vtabptr_7pyarrow_8_dataset_PartitioningFactory;
static CYTHON_INLINE std::shared_ptr<arrow::dataset::PartitioningFactory>  __pyx_f_7pyarrow_8_dataset_19PartitioningFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *);


/* "pyarrow/_dataset.pyx":150
 * 
 * 
 * cdef class DirectoryPartitioning(Partitioning):             # <<<<<<<<<<<<<<
 *     """
 *     A Partitioning based on a specified Schema.
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_DirectoryPartitioning {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_DirectoryPartitioning *__pyx_vtabptr_7pyarrow_8_dataset_DirectoryPartitioning;


/* "pyarrow/_dataset.pyx":215
 * 
 * 
 * cdef class HivePartitioning(Partitioning):             # <<<<<<<<<<<<<<
 *     """
 *     A Partitioning for "/$key=$value/" nested directories as found in
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_HivePartitioning {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_HivePartitioning *__pyx_vtabptr_7pyarrow_8_dataset_HivePartitioning;


/* "pyarrow/_dataset.pyx":279
 * 
 * 
 * cdef class FileSystemFactoryOptions:             # <<<<<<<<<<<<<<
 *     """
 *     Influences the discovery of filesystem paths.
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemFactoryOptions {
  arrow::dataset::FileSystemFactoryOptions (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_vtabptr_7pyarrow_8_dataset_FileSystemFactoryOptions;
static CYTHON_INLINE arrow::dataset::FileSystemFactoryOptions __pyx_f_7pyarrow_8_dataset_24FileSystemFactoryOptions_unwrap(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *);


/* "pyarrow/_dataset.pyx":384
 * 
 * 
 * cdef class SourceFactory:             # <<<<<<<<<<<<<<
 *     """
 *     SourceFactory is used to create a Source, inspect the Schema
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_SourceFactory {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *, std::shared_ptr<arrow::dataset::SourceFactory>  &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::SourceFactory>  &);
  std::shared_ptr<arrow::dataset::SourceFactory>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_SourceFactory *__pyx_vtabptr_7pyarrow_8_dataset_SourceFactory;
static CYTHON_INLINE std::shared_ptr<arrow::dataset::SourceFactory>  __pyx_f_7pyarrow_8_dataset_13SourceFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *);


/* "pyarrow/_dataset.pyx":474
 * 
 * 
 * cdef class FileSystemSourceFactory(SourceFactory):             # <<<<<<<<<<<<<<
 *     """
 *     Create a SourceFactory from a list of paths with schema inspection.
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemSourceFactory {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_SourceFactory __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemSourceFactory *__pyx_vtabptr_7pyarrow_8_dataset_FileSystemSourceFactory;


/* "pyarrow/_dataset.pyx":538
 * 
 * 
 * cdef class Source:             # <<<<<<<<<<<<<<
 *     """Basic component of a Dataset which yields zero or more fragments.  """
 * 
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_Source {
  void (*init)(struct __pyx_obj_7pyarrow_8_dataset_Source *, std::shared_ptr<arrow::dataset::Source>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::Source>  &);
  std::shared_ptr<arrow::dataset::Source>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_Source *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_Source *__pyx_vtabptr_7pyarrow_8_dataset_Source;


/* "pyarrow/_dataset.pyx":591
 * 
 * 
 * cdef class TreeSource(Source):             # <<<<<<<<<<<<<<
 *     """A Source created from other source objects"""
 * 
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_TreeSource {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Source __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_TreeSource *__pyx_vtabptr_7pyarrow_8_dataset_TreeSource;


/* "pyarrow/_dataset.pyx":615
 * 
 * 
 * cdef class FileSystemSource(Source):             # <<<<<<<<<<<<<<
 *     """A Source created from a set of files on a particular filesystem"""
 * 
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemSource {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Source __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemSource *__pyx_vtabptr_7pyarrow_8_dataset_FileSystemSource;


/* "pyarrow/_dataset.pyx":680
 * 
 * 
 * cdef class DatasetFactory:             # <<<<<<<<<<<<<<
 *     """
 *     Provides a way to inspect/discover a Dataset's expected schema before
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_DatasetFactory {
  void (*init)(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *, std::shared_ptr<arrow::dataset::DatasetFactory>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::DatasetFactory>  &);
  std::shared_ptr<arrow::dataset::DatasetFactory>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_DatasetFactory *__pyx_vtabptr_7pyarrow_8_dataset_DatasetFactory;
static CYTHON_INLINE std::shared_ptr<arrow::dataset::DatasetFactory>  __pyx_f_7pyarrow_8_dataset_14DatasetFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *);


/* "pyarrow/_dataset.pyx":744
 * 
 * 
 * cdef class Dataset:             # <<<<<<<<<<<<<<
 *     """
 *     Collection of data fragments coming from possibly multiple sources.
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_Dataset {
  void (*init)(struct __pyx_obj_7pyarrow_8_dataset_Dataset *, std::shared_ptr<arrow::dataset::Dataset>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::Dataset>  &);
  std::shared_ptr<arrow::dataset::Dataset>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_Dataset *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_Dataset *__pyx_vtabptr_7pyarrow_8_dataset_Dataset;
static CYTHON_INLINE std::shared_ptr<arrow::dataset::Dataset>  __pyx_f_7pyarrow_8_dataset_7Dataset_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Dataset *);


/* "pyarrow/_dataset.pyx":919
 * 
 * 
 * cdef class ScanTask:             # <<<<<<<<<<<<<<
 *     """Read record batches from a range of a single data fragment.
 * 
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_ScanTask {
  PyObject *(*init)(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *, std::shared_ptr< arrow::dataset::ScanTask>  &);
  PyObject *(*wrap)(std::shared_ptr< arrow::dataset::ScanTask>  &);
  std::shared_ptr< arrow::dataset::ScanTask>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_ScanTask *__pyx_vtabptr_7pyarrow_8_dataset_ScanTask;
static CYTHON_INLINE std::shared_ptr< arrow::dataset::ScanTask>  __pyx_f_7pyarrow_8_dataset_8ScanTask_unwrap(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *);


/* "pyarrow/_dataset.pyx":971
 * 
 * 
 * cdef class Scanner:             # <<<<<<<<<<<<<<
 *     """A materialized scan operation with context and options bound.
 * 
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_Scanner {
  void (*init)(struct __pyx_obj_7pyarrow_8_dataset_Scanner *, std::shared_ptr<arrow::dataset::Scanner>  &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::Scanner>  &);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_Scanner *__pyx_vtabptr_7pyarrow_8_dataset_Scanner;


/* "pyarrow/_dataset.pyx":1118
 * 
 * 
 * cdef class Expression:             # <<<<<<<<<<<<<<
 * 
 *     cdef:
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression {
  void (*init)(struct __pyx_obj_7pyarrow_8_dataset_Expression *, std::shared_ptr<arrow::dataset::Expression>  const &);
  PyObject *(*wrap)(std::shared_ptr<arrow::dataset::Expression>  const &);
  std::shared_ptr<arrow::dataset::Expression>  (*unwrap)(struct __pyx_obj_7pyarrow_8_dataset_Expression *);
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression *__pyx_vtabptr_7pyarrow_8_dataset_Expression;
static CYTHON_INLINE std::shared_ptr<arrow::dataset::Expression>  __pyx_f_7pyarrow_8_dataset_10Expression_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Expression *);


/* "pyarrow/_dataset.pyx":1236
 * 
 * 
 * cdef class UnaryExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CUnaryExpression* unary
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_UnaryExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_UnaryExpression *__pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression;


/* "pyarrow/_dataset.pyx":1245
 * 
 * 
 * cdef class BinaryExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CBinaryExpression* binary
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_BinaryExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_BinaryExpression *__pyx_vtabptr_7pyarrow_8_dataset_BinaryExpression;


/* "pyarrow/_dataset.pyx":1262
 * 
 * 
 * cdef class ScalarExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CScalarExpression* scalar
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_ScalarExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_ScalarExpression *__pyx_vtabptr_7pyarrow_8_dataset_ScalarExpression;


/* "pyarrow/_dataset.pyx":1290
 * 
 * 
 * cdef class FieldExpression(Expression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CFieldExpression* scalar
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_FieldExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_FieldExpression *__pyx_vtabptr_7pyarrow_8_dataset_FieldExpression;


/* "pyarrow/_dataset.pyx":1318
 * 
 * 
 * cdef class ComparisonExpression(BinaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     cdef CComparisonExpression* comparison
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_ComparisonExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_BinaryExpression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_ComparisonExpression *__pyx_vtabptr_7pyarrow_8_dataset_ComparisonExpression;


/* "pyarrow/_dataset.pyx":1342
 * 
 * 
 * cdef class IsValidExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None):
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_IsValidExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_IsValidExpression *__pyx_vtabptr_7pyarrow_8_dataset_IsValidExpression;


/* "pyarrow/_dataset.pyx":1350
 * 
 * 
 * cdef class CastExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None, DataType to not None,
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_CastExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_CastExpression *__pyx_vtabptr_7pyarrow_8_dataset_CastExpression;


/* "pyarrow/_dataset.pyx":1368
 * 
 * 
 * cdef class InExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None, Array haystack not None):
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_InExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_InExpression *__pyx_vtabptr_7pyarrow_8_dataset_InExpression;


/* "pyarrow/_dataset.pyx":1378
 * 
 * 
 * cdef class NotExpression(UnaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression operand not None):
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_NotExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_UnaryExpression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_NotExpression *__pyx_vtabptr_7pyarrow_8_dataset_NotExpression;


/* "pyarrow/_dataset.pyx":1386
 * 
 * 
 * cdef class AndExpression(BinaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression left not None, Expression right not None,
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_AndExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_BinaryExpression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_AndExpression *__pyx_vtabptr_7pyarrow_8_dataset_AndExpression;


/* "pyarrow/_dataset.pyx":1400
 * 
 * 
 * cdef class OrExpression(BinaryExpression):             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, Expression left not None, Expression right not None,
 */

struct __pyx_vtabstruct_7pyarrow_8_dataset_OrExpression {
  struct __pyx_vtabstruct_7pyarrow_8_dataset_BinaryExpression __pyx_base;
};
static struct __pyx_vtabstruct_7pyarrow_8_dataset_OrExpression *__pyx_vtabptr_7pyarrow_8_dataset_OrExpression;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* GetTopmostException.proto */
#if CYTHON_USE_EXC_INFO_STACK
static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
#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

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

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

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

/* GetAttr3.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);

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

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

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

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

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

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

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

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

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

/* Globals.proto */
static PyObject* __Pyx_Globals(void);

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

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

/* None.proto */
static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void); /* proto */

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__arrow_3a__3a_dataset_3a__3a_ExpressionType_3a__3a_type(enum arrow::dataset::ExpressionType::type value);

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(enum __pyx_t_7pyarrow_8_dataset_CompareOperator value);

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

/* CIntFromPy.proto */
static CYTHON_INLINE enum __pyx_t_7pyarrow_8_dataset_CompareOperator __Pyx_PyInt_As_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(PyObject *);

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

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

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

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

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

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

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

/* CoroutineBase.proto */
typedef PyObject *(*__pyx_coroutine_body_t)(PyObject *, PyThreadState *, PyObject *);
#if CYTHON_USE_EXC_INFO_STACK
#define __Pyx_ExcInfoStruct  _PyErr_StackItem
#else
typedef struct {
    PyObject *exc_type;
    PyObject *exc_value;
    PyObject *exc_traceback;
} __Pyx_ExcInfoStruct;
#endif
typedef struct {
    PyObject_HEAD
    __pyx_coroutine_body_t body;
    PyObject *closure;
    __Pyx_ExcInfoStruct gi_exc_state;
    PyObject *gi_weakreflist;
    PyObject *classobj;
    PyObject *yieldfrom;
    PyObject *gi_name;
    PyObject *gi_qualname;
    PyObject *gi_modulename;
    PyObject *gi_code;
    int resume_label;
    char is_running;
} __pyx_CoroutineObject;
static __pyx_CoroutineObject *__Pyx__Coroutine_New(
    PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
    PyObject *name, PyObject *qualname, PyObject *module_name);
static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
            __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name);
static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self);
static int __Pyx_Coroutine_clear(PyObject *self);
static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value);
static PyObject *__Pyx_Coroutine_Close(PyObject *self);
static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args);
#if CYTHON_USE_EXC_INFO_STACK
#define __Pyx_Coroutine_SwapException(self)
#define __Pyx_Coroutine_ResetAndClearException(self)  __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state)
#else
#define __Pyx_Coroutine_SwapException(self) {\
    __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\
    __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\
    }
#define __Pyx_Coroutine_ResetAndClearException(self) {\
    __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\
    (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\
    }
#endif
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
    __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue)
#else
#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
    __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue)
#endif
static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue);
static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state);

/* PatchModuleWithCoroutine.proto */
static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code);

/* PatchGeneratorABC.proto */
static int __Pyx_patch_abc(void);

/* Generator.proto */
#define __Pyx_Generator_USED
static PyTypeObject *__pyx_GeneratorType = 0;
#define __Pyx_Generator_CheckExact(obj) (Py_TYPE(obj) == __pyx_GeneratorType)
#define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\
    __Pyx__Coroutine_New(__pyx_GeneratorType, body, code, closure, name, qualname, module_name)
static PyObject *__Pyx_Generator_Next(PyObject *self);
static int __pyx_Generator_init(void);

/* 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 void __pyx_f_7pyarrow_8_dataset_10FileFormat_init(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self, std::shared_ptr<arrow::dataset::FileFormat>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_10FileFormat_wrap(std::shared_ptr<arrow::dataset::FileFormat>  &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr<arrow::dataset::FileFormat>  __pyx_f_7pyarrow_8_dataset_10FileFormat_unwrap(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_12Partitioning_init(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self, std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_12Partitioning_wrap(std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr<arrow::dataset::Partitioning>  __pyx_f_7pyarrow_8_dataset_12Partitioning_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_init(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::PartitioningFactory>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_wrap(std::shared_ptr<arrow::dataset::PartitioningFactory>  const &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr<arrow::dataset::PartitioningFactory>  __pyx_f_7pyarrow_8_dataset_19PartitioningFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_21DirectoryPartitioning_init(struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__pyx_v_self, std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_16HivePartitioning_init(struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__pyx_v_self, std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp); /* proto*/
static CYTHON_INLINE arrow::dataset::FileSystemFactoryOptions __pyx_f_7pyarrow_8_dataset_24FileSystemFactoryOptions_unwrap(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_13SourceFactory_init(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::SourceFactory>  &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_13SourceFactory_wrap(std::shared_ptr<arrow::dataset::SourceFactory>  &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr<arrow::dataset::SourceFactory>  __pyx_f_7pyarrow_8_dataset_13SourceFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_23FileSystemSourceFactory_init(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::SourceFactory>  &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_6Source_init(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self, std::shared_ptr<arrow::dataset::Source>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_6Source_wrap(std::shared_ptr<arrow::dataset::Source>  &__pyx_v_sp); /* proto*/
static std::shared_ptr<arrow::dataset::Source>  __pyx_f_7pyarrow_8_dataset_6Source_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_10TreeSource_init(struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__pyx_v_self, std::shared_ptr<arrow::dataset::Source>  const &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_16FileSystemSource_init(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__pyx_v_self, std::shared_ptr<arrow::dataset::Source>  const &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_14DatasetFactory_init(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::DatasetFactory>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_14DatasetFactory_wrap(std::shared_ptr<arrow::dataset::DatasetFactory>  &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr<arrow::dataset::DatasetFactory>  __pyx_f_7pyarrow_8_dataset_14DatasetFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_7Dataset_init(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, std::shared_ptr<arrow::dataset::Dataset>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_7Dataset_wrap(std::shared_ptr<arrow::dataset::Dataset>  &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr<arrow::dataset::Dataset>  __pyx_f_7pyarrow_8_dataset_7Dataset_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_8ScanTask_init(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self, std::shared_ptr< arrow::dataset::ScanTask>  &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_8ScanTask_wrap(std::shared_ptr< arrow::dataset::ScanTask>  &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr< arrow::dataset::ScanTask>  __pyx_f_7pyarrow_8_dataset_8ScanTask_unwrap(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_7Scanner_init(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self, std::shared_ptr<arrow::dataset::Scanner>  &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_7Scanner_wrap(std::shared_ptr<arrow::dataset::Scanner>  &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_10Expression_init(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp); /* proto*/
static PyObject *__pyx_f_7pyarrow_8_dataset_10Expression_wrap(std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp); /* proto*/
static CYTHON_INLINE std::shared_ptr<arrow::dataset::Expression>  __pyx_f_7pyarrow_8_dataset_10Expression_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_15UnaryExpression_init(struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_16BinaryExpression_init(struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_16ScalarExpression_init(struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_15FieldExpression_init(struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp); /* proto*/
static void __pyx_f_7pyarrow_8_dataset_20ComparisonExpression_init(struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp); /* proto*/

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

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

/* Module declarations from '__builtin__' */

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

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

/* 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 'cpython.object' */

/* Module declarations from 'libcpp' */

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

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

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

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

/* Module declarations from 'cpython.datetime' */
static PyTypeObject *__pyx_ptype_7cpython_8datetime_date = 0;
static PyTypeObject *__pyx_ptype_7cpython_8datetime_time = 0;
static PyTypeObject *__pyx_ptype_7cpython_8datetime_datetime = 0;
static PyTypeObject *__pyx_ptype_7cpython_8datetime_timedelta = 0;
static PyTypeObject *__pyx_ptype_7cpython_8datetime_tzinfo = 0;

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

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

/* 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_MapType = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FixedSizeListType = 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_DurationType = 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_MapValue = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FixedSizeListValue = 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_SparseCSRMatrix = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_SparseCOOTensor = 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_MapArray = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3lib_FixedSizeListArray = 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 PyTypeObject *__pyx_ptype_7pyarrow_3lib_CastOptions = 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 struct __pyx_obj_7pyarrow_3lib_DataType *(*__pyx_f_7pyarrow_3lib_ensure_type)(PyObject *, struct __pyx_opt_args_7pyarrow_3lib_ensure_type *__pyx_optional_args); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_scalar)(std::shared_ptr< arrow::Scalar>  const &); /*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_coo_tensor)(std::shared_ptr< arrow::SparseCOOTensor>  const &); /*proto*/
static PyObject *(*__pyx_f_7pyarrow_3lib_pyarrow_wrap_sparse_csr_matrix)(std::shared_ptr< arrow::SparseCSRMatrix>  const &); /*proto*/
static std::shared_ptr< arrow::Scalar>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_scalar)(PyObject *); /*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::SparseCOOTensor>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_sparse_coo_tensor)(PyObject *); /*proto*/
static std::shared_ptr< arrow::SparseCSRMatrix>  (*__pyx_f_7pyarrow_3lib_pyarrow_unwrap_sparse_csr_matrix)(PyObject *); /*proto*/

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

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

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

/* Module declarations from 'pyarrow._fs' */
static PyTypeObject *__pyx_ptype_7pyarrow_3_fs_FileStats = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3_fs_FileSelector = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3_fs_FileSystem = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3_fs_LocalFileSystem = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3_fs_SubTreeFileSystem = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_3_fs__MockFileSystem = 0;

/* Module declarations from 'pyarrow._dataset' */
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_FileFormat = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_ParquetFileFormat = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_Partitioning = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_PartitioningFactory = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_HivePartitioning = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_FileSystemFactoryOptions = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_SourceFactory = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_FileSystemSourceFactory = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_Source = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_TreeSource = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_FileSystemSource = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_DatasetFactory = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_Dataset = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_ScanTask = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_Scanner = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_Expression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_UnaryExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_BinaryExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_ScalarExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_FieldExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_ComparisonExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_IsValidExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_CastExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_InExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_NotExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_AndExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset_OrExpression = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct__to_batches = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct_1_execute = 0;
static PyTypeObject *__pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct_2_scan = 0;
static PyTypeObject *__pyx_ptype___Pyx_EnumMeta = 0;
static PyObject *__Pyx_OrderedDict = 0;
static PyObject *__Pyx_EnumBase = 0;
static PyObject *__Pyx_globals = 0;
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 std::string __pyx_convert_string_from_py_std__in_string(PyObject *); /*proto*/
static std::vector<std::string>  __pyx_convert_vector_from_py_std_3a__3a_string(PyObject *); /*proto*/
static PyObject *__pyx_unpickle___Pyx_EnumMeta__set_state(struct __pyx_obj___Pyx_EnumMeta *, PyObject *); /*proto*/
#define __Pyx_MODULE_NAME "pyarrow._dataset"
extern int __pyx_module_is_main_pyarrow___dataset;
int __pyx_module_is_main_pyarrow___dataset = 0;

/* Implementation of 'pyarrow._dataset' */
static PyObject *__pyx_builtin_staticmethod;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_StopIteration;
static PyObject *__pyx_builtin_NotImplemented;
static const char __pyx_k_[] = ", ";
static const char __pyx_k_s[] = "s";
static const char __pyx_k_v[] = "v";
static const char __pyx_k_fn[] = "fn";
static const char __pyx_k_op[] = "op";
static const char __pyx_k_pa[] = "pa";
static const char __pyx_k_to[] = "to";
static const char __pyx_k_cls[] = "cls";
static const char __pyx_k_dct[] = "dct";
static const char __pyx_k_doc[] = "__doc__";
static const char __pyx_k_msg[] = "msg";
static const char __pyx_k_new[] = "__new__";
static const char __pyx_k_res[] = "res";
static const char __pyx_k_s_s[] = "%s.%s";
static const char __pyx_k_six[] = "six";
static const char __pyx_k_str[] = "__str__";
static const char __pyx_k_Less[] = "Less";
static const char __pyx_k_args[] = "args";
static const char __pyx_k_dict[] = "__dict__";
static const char __pyx_k_enum[] = "enum";
static const char __pyx_k_hive[] = "hive";
static const char __pyx_k_init[] = "__init__";
static const char __pyx_k_left[] = "left";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_name[] = "__name__";
static const char __pyx_k_repr[] = "__repr__";
static const char __pyx_k_safe[] = "safe";
static const char __pyx_k_scan[] = "scan";
static const char __pyx_k_self[] = "self";
static const char __pyx_k_send[] = "send";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_tree[] = "tree";
static const char __pyx_k_type[] = "type";
static const char __pyx_k_Equal[] = "Equal";
static const char __pyx_k_array[] = "array";
static const char __pyx_k_binop[] = "_binop";
static const char __pyx_k_class[] = "__class__";
static const char __pyx_k_close[] = "close";
static const char __pyx_k_klass[] = "klass";
static const char __pyx_k_right[] = "right";
static const char __pyx_k_s_s_d[] = "<%s.%s: %d>";
static const char __pyx_k_slots[] = "__slots__";
static const char __pyx_k_throw[] = "throw";
static const char __pyx_k_value[] = "value";
static const char __pyx_k_Source[] = "Source";
static const char __pyx_k_filter[] = "filter";
static const char __pyx_k_format[] = "format";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_module[] = "__module__";
static const char __pyx_k_name_2[] = "name";
static const char __pyx_k_pickle[] = "pickle";
static const char __pyx_k_reduce[] = "__reduce__";
static const char __pyx_k_schema[] = "schema";
static const char __pyx_k_unsafe[] = "unsafe";
static const char __pyx_k_update[] = "update";
static const char __pyx_k_values[] = "values";
static const char __pyx_k_Dataset[] = "Dataset";
static const char __pyx_k_Greater[] = "Greater";
static const char __pyx_k_IntEnum[] = "IntEnum";
static const char __pyx_k_Scanner[] = "Scanner";
static const char __pyx_k_columns[] = "columns";
static const char __pyx_k_dataset[] = "dataset";
static const char __pyx_k_execute[] = "execute";
static const char __pyx_k_factory[] = "factory";
static const char __pyx_k_members[] = "__members__";
static const char __pyx_k_operand[] = "operand";
static const char __pyx_k_options[] = "options";
static const char __pyx_k_parents[] = "parents";
static const char __pyx_k_parquet[] = "parquet";
static const char __pyx_k_prepare[] = "__prepare__";
static const char __pyx_k_pyarrow[] = "pyarrow";
static const char __pyx_k_sources[] = "sources";
static const char __pyx_k_tobytes[] = "tobytes";
static const char __pyx_k_EnumBase[] = "EnumBase";
static const char __pyx_k_EnumType[] = "EnumType";
static const char __pyx_k_NotEqual[] = "NotEqual";
static const char __pyx_k_ScanTask[] = "ScanTask";
static const char __pyx_k_discover[] = "discover";
static const char __pyx_k_getstate[] = "__getstate__";
static const char __pyx_k_haystack[] = "haystack";
static const char __pyx_k_pyx_type[] = "__pyx_type";
static const char __pyx_k_qualname[] = "__qualname__";
static const char __pyx_k_setstate[] = "__setstate__";
static const char __pyx_k_to_table[] = "to_table";
static const char __pyx_k_LessEqual[] = "LessEqual";
static const char __pyx_k_TypeError[] = "TypeError";
static const char __pyx_k_factories[] = "factories";
static const char __pyx_k_frombytes[] = "frombytes";
static const char __pyx_k_metaclass[] = "__metaclass__";
static const char __pyx_k_pyx_state[] = "__pyx_state";
static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
static const char __pyx_k_Expression[] = "Expression";
static const char __pyx_k_FileFormat[] = "FileFormat";
static const char __pyx_k_TreeSource[] = "TreeSource";
static const char __pyx_k_ValueError[] = "ValueError";
static const char __pyx_k_filesystem[] = "filesystem";
static const char __pyx_k_partitions[] = "partitions";
static const char __pyx_k_pyx_result[] = "__pyx_result";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_subclasses[] = "__subclasses__";
static const char __pyx_k_to_batches[] = "to_batches";
static const char __pyx_k_OrderedDict[] = "OrderedDict";
static const char __pyx_k_PickleError[] = "PickleError";
static const char __pyx_k_collections[] = "collections";
static const char __pyx_k_field_names[] = "field_names";
static const char __pyx_k_file_format[] = "file_format";
static const char __pyx_k_memory_pool[] = "memory_pool";
static const char __pyx_k_use_threads[] = "use_threads";
static const char __pyx_k_GreaterEqual[] = "GreaterEqual";
static const char __pyx_k_InExpression[] = "InExpression";
static const char __pyx_k_OrExpression[] = "OrExpression";
static const char __pyx_k_Partitioning[] = "Partitioning";
static const char __pyx_k_Pyx_EnumBase[] = "__Pyx_EnumBase";
static const char __pyx_k_Scanner_scan[] = "Scanner.scan";
static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
static const char __pyx_k_staticmethod[] = "staticmethod";
static const char __pyx_k_string_types[] = "string_types";
static const char __pyx_k_stringsource[] = "stringsource";
static const char __pyx_k_subclasses_2[] = "subclasses";
static const char __pyx_k_AndExpression[] = "AndExpression";
static const char __pyx_k_NotExpression[] = "NotExpression";
static const char __pyx_k_SourceFactory[] = "SourceFactory";
static const char __pyx_k_StopIteration[] = "StopIteration";
static const char __pyx_k_c_field_names[] = "c_field_names";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_CastExpression[] = "CastExpression";
static const char __pyx_k_DatasetFactory[] = "DatasetFactory";
static const char __pyx_k_NotImplemented[] = "NotImplemented";
static const char __pyx_k_pyarrow_compat[] = "pyarrow.compat";
static const char __pyx_k_root_partition[] = "root_partition";
static const char __pyx_k_CompareOperator[] = "CompareOperator";
static const char __pyx_k_FieldExpression[] = "FieldExpression";
static const char __pyx_k_UnaryExpression[] = "UnaryExpression";
static const char __pyx_k_ignore_prefixes[] = "ignore_prefixes";
static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
static const char __pyx_k_BinaryExpression[] = "BinaryExpression";
static const char __pyx_k_FileSystemSource[] = "FileSystemSource";
static const char __pyx_k_HivePartitioning[] = "HivePartitioning";
static const char __pyx_k_ScalarExpression[] = "ScalarExpression";
static const char __pyx_k_ScanTask_execute[] = "ScanTask.execute";
static const char __pyx_k_get_target_stats[] = "get_target_stats";
static const char __pyx_k_pyarrow__dataset[] = "pyarrow._dataset";
static const char __pyx_k_IsValidExpression[] = "IsValidExpression";
static const char __pyx_k_ParquetFileFormat[] = "ParquetFileFormat";
static const char __pyx_k_paths_or_selector[] = "paths_or_selector";
static const char __pyx_k_Dataset_to_batches[] = "Dataset.to_batches";
static const char __pyx_k_Pyx_EnumBase___new[] = "__Pyx_EnumBase.__new__";
static const char __pyx_k_Pyx_EnumBase___str[] = "__Pyx_EnumBase.__str__";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_partition_base_dir[] = "partition_base_dir";
static const char __pyx_k_subclasses_instead[] = "subclasses_instead";
static const char __pyx_k_PartitioningFactory[] = "PartitioningFactory";
static const char __pyx_k_Pyx_EnumBase___repr[] = "__Pyx_EnumBase.__repr__";
static const char __pyx_k_ComparisonExpression[] = "ComparisonExpression";
static const char __pyx_k_Unknown_enum_value_s[] = "Unknown enum value: '%s'";
static const char __pyx_k_forbid_instantiation[] = "_forbid_instantiation";
static const char __pyx_k_pyarrow__dataset_pyx[] = "pyarrow\\_dataset.pyx";
static const char __pyx_k_DirectoryPartitioning[] = "DirectoryPartitioning";
static const char __pyx_k_exclude_invalid_files[] = "exclude_invalid_files";
static const char __pyx_k_FileSystemSourceFactory[] = "FileSystemSourceFactory";
static const char __pyx_k_FileSystemFactoryOptions[] = "FileSystemFactoryOptions";
static const char __pyx_k_pyx_unpickle___Pyx_EnumMeta[] = "__pyx_unpickle___Pyx_EnumMeta";
static const char __pyx_k_Not_yet_supported_scalar_value[] = "Not yet supported scalar value: {}";
static const char __pyx_k_Use_one_of_the_subclasses_inste[] = " Use one of the subclasses instead: {}";
static const char __pyx_k_is_an_abstract_class_thus_canno[] = "{} is an abstract class thus cannot be initialized.";
static const char __pyx_k_self_format_self_wrapped_cannot[] = "self.format,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_source_self_wrapped_cannot[] = "self.source,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_Dataset_is_currently_unstable_AP[] = "Dataset is currently unstable. APIs subject to change without notice.";
static const char __pyx_k_Incompatible_checksums_s_vs_0xd4[] = "Incompatible checksums (%s vs 0xd41d8cd = ())";
static const char __pyx_k_Must_pass_either_paths_or_a_File[] = "Must pass either paths or a FileSelector";
static const char __pyx_k_Neither_left_nor_right_arguments[] = "Neither left nor right arguments are Expressions";
static const char __pyx_k_The_number_of_files_resulting_fr[] = "The number of files resulting from paths_or_selector must be equal to the number of partitions.";
static const char __pyx_k_self_binary_self_comparison_self[] = "self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_binary_self_expr_self_wrapp[] = "self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_dataset_self_wrapped_cannot[] = "self.dataset,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_directory_partitioning_self[] = "self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_expr_self_scalar_self_wrapp[] = "self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_expr_self_unary_self_wrappe[] = "self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_expr_self_wrapped_cannot_be[] = "self.expr,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_factory_self_filesystem_fac[] = "self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_factory_self_wrapped_cannot[] = "self.factory,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_filesystem_source_self_sour[] = "self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_hive_partitioning_self_part[] = "self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_options_cannot_be_converted[] = "self.options cannot be converted to a Python object for pickling";
static const char __pyx_k_self_partitioning_self_wrapped_c[] = "self.partitioning,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_scanner_self_wrapped_cannot[] = "self.scanner,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_source_self_tree_source_sel[] = "self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling";
static const char __pyx_k_self_task_self_wrapped_cannot_be[] = "self.task,self.wrapped cannot be converted to a Python object for pickling";
static PyObject *__pyx_kp_u_;
static PyObject *__pyx_n_s_AndExpression;
static PyObject *__pyx_n_s_BinaryExpression;
static PyObject *__pyx_n_s_CastExpression;
static PyObject *__pyx_n_s_CompareOperator;
static PyObject *__pyx_n_s_ComparisonExpression;
static PyObject *__pyx_n_s_Dataset;
static PyObject *__pyx_n_s_DatasetFactory;
static PyObject *__pyx_n_s_Dataset_to_batches;
static PyObject *__pyx_n_s_DirectoryPartitioning;
static PyObject *__pyx_n_s_EnumBase;
static PyObject *__pyx_n_s_EnumType;
static PyObject *__pyx_n_s_Equal;
static PyObject *__pyx_n_s_Expression;
static PyObject *__pyx_n_s_FieldExpression;
static PyObject *__pyx_n_s_FileFormat;
static PyObject *__pyx_n_s_FileSystemFactoryOptions;
static PyObject *__pyx_n_s_FileSystemSource;
static PyObject *__pyx_n_s_FileSystemSourceFactory;
static PyObject *__pyx_n_s_Greater;
static PyObject *__pyx_n_s_GreaterEqual;
static PyObject *__pyx_n_s_HivePartitioning;
static PyObject *__pyx_n_s_InExpression;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xd4;
static PyObject *__pyx_n_s_IntEnum;
static PyObject *__pyx_n_s_IsValidExpression;
static PyObject *__pyx_n_s_Less;
static PyObject *__pyx_n_s_LessEqual;
static PyObject *__pyx_kp_u_Must_pass_either_paths_or_a_File;
static PyObject *__pyx_kp_u_Neither_left_nor_right_arguments;
static PyObject *__pyx_n_s_NotEqual;
static PyObject *__pyx_n_s_NotExpression;
static PyObject *__pyx_n_s_NotImplemented;
static PyObject *__pyx_kp_u_Not_yet_supported_scalar_value;
static PyObject *__pyx_n_s_OrExpression;
static PyObject *__pyx_n_s_OrderedDict;
static PyObject *__pyx_n_s_ParquetFileFormat;
static PyObject *__pyx_n_s_Partitioning;
static PyObject *__pyx_n_s_PartitioningFactory;
static PyObject *__pyx_n_s_PickleError;
static PyObject *__pyx_n_s_Pyx_EnumBase;
static PyObject *__pyx_n_s_Pyx_EnumBase___new;
static PyObject *__pyx_n_s_Pyx_EnumBase___repr;
static PyObject *__pyx_n_s_Pyx_EnumBase___str;
static PyObject *__pyx_n_s_ScalarExpression;
static PyObject *__pyx_n_s_ScanTask;
static PyObject *__pyx_n_s_ScanTask_execute;
static PyObject *__pyx_n_s_Scanner;
static PyObject *__pyx_n_s_Scanner_scan;
static PyObject *__pyx_n_s_Source;
static PyObject *__pyx_n_s_SourceFactory;
static PyObject *__pyx_n_s_StopIteration;
static PyObject *__pyx_kp_u_The_number_of_files_resulting_fr;
static PyObject *__pyx_n_s_TreeSource;
static PyObject *__pyx_n_s_TypeError;
static PyObject *__pyx_n_s_UnaryExpression;
static PyObject *__pyx_kp_s_Unknown_enum_value_s;
static PyObject *__pyx_kp_u_Use_one_of_the_subclasses_inste;
static PyObject *__pyx_n_s_ValueError;
static PyObject *__pyx_n_s_args;
static PyObject *__pyx_n_s_array;
static PyObject *__pyx_n_s_binop;
static PyObject *__pyx_n_s_c_field_names;
static PyObject *__pyx_n_s_class;
static PyObject *__pyx_n_s_cline_in_traceback;
static PyObject *__pyx_n_s_close;
static PyObject *__pyx_n_s_cls;
static PyObject *__pyx_n_s_collections;
static PyObject *__pyx_n_s_columns;
static PyObject *__pyx_n_s_dataset;
static PyObject *__pyx_n_s_dct;
static PyObject *__pyx_n_s_dict;
static PyObject *__pyx_n_s_discover;
static PyObject *__pyx_n_s_doc;
static PyObject *__pyx_n_s_enum;
static PyObject *__pyx_n_s_exclude_invalid_files;
static PyObject *__pyx_n_s_execute;
static PyObject *__pyx_n_s_factories;
static PyObject *__pyx_n_s_factory;
static PyObject *__pyx_n_s_field_names;
static PyObject *__pyx_n_s_file_format;
static PyObject *__pyx_n_s_filesystem;
static PyObject *__pyx_n_u_filesystem;
static PyObject *__pyx_n_s_filter;
static PyObject *__pyx_n_s_fn;
static PyObject *__pyx_n_s_forbid_instantiation;
static PyObject *__pyx_n_s_format;
static PyObject *__pyx_n_s_frombytes;
static PyObject *__pyx_n_s_get_target_stats;
static PyObject *__pyx_n_s_getstate;
static PyObject *__pyx_n_s_haystack;
static PyObject *__pyx_n_u_hive;
static PyObject *__pyx_n_s_ignore_prefixes;
static PyObject *__pyx_n_s_import;
static PyObject *__pyx_n_s_init;
static PyObject *__pyx_kp_u_is_an_abstract_class_thus_canno;
static PyObject *__pyx_n_s_klass;
static PyObject *__pyx_n_s_left;
static PyObject *__pyx_n_s_main;
static PyObject *__pyx_n_s_members;
static PyObject *__pyx_n_s_memory_pool;
static PyObject *__pyx_n_s_metaclass;
static PyObject *__pyx_n_s_module;
static PyObject *__pyx_n_s_msg;
static PyObject *__pyx_n_s_name;
static PyObject *__pyx_n_s_name_2;
static PyObject *__pyx_n_s_new;
static PyObject *__pyx_n_s_op;
static PyObject *__pyx_n_s_operand;
static PyObject *__pyx_n_s_options;
static PyObject *__pyx_n_s_pa;
static PyObject *__pyx_n_s_parents;
static PyObject *__pyx_n_u_parquet;
static PyObject *__pyx_n_s_partition_base_dir;
static PyObject *__pyx_n_s_partitions;
static PyObject *__pyx_n_s_paths_or_selector;
static PyObject *__pyx_n_s_pickle;
static PyObject *__pyx_n_s_prepare;
static PyObject *__pyx_n_s_pyarrow;
static PyObject *__pyx_n_s_pyarrow__dataset;
static PyObject *__pyx_kp_s_pyarrow__dataset_pyx;
static PyObject *__pyx_n_s_pyarrow_compat;
static PyObject *__pyx_n_s_pyx_PickleError;
static PyObject *__pyx_n_s_pyx_checksum;
static PyObject *__pyx_n_s_pyx_result;
static PyObject *__pyx_n_s_pyx_state;
static PyObject *__pyx_n_s_pyx_type;
static PyObject *__pyx_n_s_pyx_unpickle___Pyx_EnumMeta;
static PyObject *__pyx_n_s_pyx_vtable;
static PyObject *__pyx_n_s_qualname;
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_res;
static PyObject *__pyx_n_s_right;
static PyObject *__pyx_n_s_root_partition;
static PyObject *__pyx_n_s_s;
static PyObject *__pyx_kp_s_s_s;
static PyObject *__pyx_kp_s_s_s_d;
static PyObject *__pyx_n_s_safe;
static PyObject *__pyx_n_s_scan;
static PyObject *__pyx_n_s_schema;
static PyObject *__pyx_n_u_schema;
static PyObject *__pyx_n_s_self;
static PyObject *__pyx_kp_s_self_binary_self_comparison_self;
static PyObject *__pyx_kp_s_self_binary_self_expr_self_wrapp;
static PyObject *__pyx_kp_s_self_dataset_self_wrapped_cannot;
static PyObject *__pyx_kp_s_self_directory_partitioning_self;
static PyObject *__pyx_kp_s_self_expr_self_scalar_self_wrapp;
static PyObject *__pyx_kp_s_self_expr_self_unary_self_wrappe;
static PyObject *__pyx_kp_s_self_expr_self_wrapped_cannot_be;
static PyObject *__pyx_kp_s_self_factory_self_filesystem_fac;
static PyObject *__pyx_kp_s_self_factory_self_wrapped_cannot;
static PyObject *__pyx_kp_s_self_filesystem_source_self_sour;
static PyObject *__pyx_kp_s_self_format_self_wrapped_cannot;
static PyObject *__pyx_kp_s_self_hive_partitioning_self_part;
static PyObject *__pyx_kp_s_self_options_cannot_be_converted;
static PyObject *__pyx_kp_s_self_partitioning_self_wrapped_c;
static PyObject *__pyx_kp_s_self_scanner_self_wrapped_cannot;
static PyObject *__pyx_kp_s_self_source_self_tree_source_sel;
static PyObject *__pyx_kp_s_self_source_self_wrapped_cannot;
static PyObject *__pyx_kp_s_self_task_self_wrapped_cannot_be;
static PyObject *__pyx_n_s_send;
static PyObject *__pyx_n_s_setstate;
static PyObject *__pyx_n_s_setstate_cython;
static PyObject *__pyx_n_s_six;
static PyObject *__pyx_n_s_slots;
static PyObject *__pyx_n_s_sources;
static PyObject *__pyx_n_s_staticmethod;
static PyObject *__pyx_n_s_str;
static PyObject *__pyx_n_s_string_types;
static PyObject *__pyx_kp_s_stringsource;
static PyObject *__pyx_n_s_subclasses;
static PyObject *__pyx_n_s_subclasses_2;
static PyObject *__pyx_n_s_subclasses_instead;
static PyObject *__pyx_n_s_test;
static PyObject *__pyx_n_s_throw;
static PyObject *__pyx_n_s_to;
static PyObject *__pyx_n_s_to_batches;
static PyObject *__pyx_n_s_to_table;
static PyObject *__pyx_n_s_tobytes;
static PyObject *__pyx_n_u_tree;
static PyObject *__pyx_n_s_type;
static PyObject *__pyx_n_s_unsafe;
static PyObject *__pyx_n_s_update;
static PyObject *__pyx_n_s_use_threads;
static PyObject *__pyx_n_s_v;
static PyObject *__pyx_n_s_value;
static PyObject *__pyx_n_s_values;
static PyObject *__pyx_pf_7pyarrow_8_dataset__forbid_instantiation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_klass, PyObject *__pyx_v_subclasses_instead); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_10FileFormat___init__(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10FileFormat_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10FileFormat_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_17ParquetFileFormat___init__(struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_17ParquetFileFormat_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_17ParquetFileFormat_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_12Partitioning___init__(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12Partitioning_2parse(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self, PyObject *__pyx_v_path); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12Partitioning_6schema___get__(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12Partitioning_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12Partitioning_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_19PartitioningFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_19PartitioningFactory_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_19PartitioningFactory_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning___init__(struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning_2discover(PyObject *__pyx_v_field_names); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_16HivePartitioning___init__(struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16HivePartitioning_2discover(void); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16HivePartitioning_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16HivePartitioning_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions___init__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, PyObject *__pyx_v_partition_base_dir, PyObject *__pyx_v_exclude_invalid_files, PyObject *__pyx_v_ignore_prefixes); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, int __pyx_v_value); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, PyObject *__pyx_v_values); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_13SourceFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_14root_partition___get__(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_13SourceFactory_14root_partition_2__set__(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_expr); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_2inspect_schemas(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_4inspect(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_6finish(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_23FileSystemSourceFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_3_fs_FileSystem *__pyx_v_filesystem, PyObject *__pyx_v_paths_or_selector, struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_format, struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_options); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_23FileSystemSourceFactory_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_23FileSystemSourceFactory_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_6Source___init__(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_6Source_6schema___get__(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_6Source_20partition_expression___get__(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_6Source_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_6Source_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_10TreeSource___init__(struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__pyx_v_self, PyObject *__pyx_v_schema, PyObject *__pyx_v_sources); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10TreeSource_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10TreeSource_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_16FileSystemSource___init__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_root_partition, struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_file_format, struct __pyx_obj_7pyarrow_3_fs_FileSystem *__pyx_v_filesystem, PyObject *__pyx_v_paths_or_selector, PyObject *__pyx_v_partitions); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16FileSystemSource_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16FileSystemSource_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_14DatasetFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self, PyObject *__pyx_v_factories); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_7sources___get__(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_2inspect_schemas(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_4inspect(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_6finish(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_7Dataset___init__(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_sources, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_2scan(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_columns, PyObject *__pyx_v_filter, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_4to_batches(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_columns, PyObject *__pyx_v_filter, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_7to_table(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_columns, PyObject *__pyx_v_filter, PyObject *__pyx_v_use_threads, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_7sources___get__(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_6schema___get__(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_9__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_11__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_8ScanTask___init__(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_8ScanTask_2execute(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_8ScanTask_5__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_8ScanTask_7__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_7Scanner___init__(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_dataset, PyObject *__pyx_v_columns, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_filter, int __pyx_v_use_threads, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_2scan(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_5to_table(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_7__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_9__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_2_binop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fn, PyObject *__pyx_v_left, PyObject *__pyx_v_right); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_10Expression___init__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_2equals(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_4__str__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_6validate(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_8assume(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_given); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_10__invert__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_12__richcmp__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_14__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_16__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_18is_valid(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_20cast(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, PyObject *__pyx_v_type, int __pyx_v_safe); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_22isin(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, PyObject *__pyx_v_values); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_24__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_26__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_15UnaryExpression___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_15UnaryExpression_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16BinaryExpression_12left_operand___get__(struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16BinaryExpression_13right_operand___get__(struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16BinaryExpression___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16BinaryExpression_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_16ScalarExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16ScalarExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_16ScalarExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_15FieldExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_15FieldExpression_2name(struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_15FieldExpression_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_15FieldExpression_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_20ComparisonExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self, enum __pyx_t_7pyarrow_8_dataset_CompareOperator __pyx_v_op, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_20ComparisonExpression_2op(struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_20ComparisonExpression_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_20ComparisonExpression_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_17IsValidExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_17IsValidExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_17IsValidExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_14CastExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_CastExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand, struct __pyx_obj_7pyarrow_3lib_DataType *__pyx_v_to, int __pyx_v_safe); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14CastExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_CastExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_14CastExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_CastExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_12InExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_InExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand, struct __pyx_obj_7pyarrow_3lib_Array *__pyx_v_haystack); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12InExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_InExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12InExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_InExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_13NotExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_NotExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13NotExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_NotExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13NotExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_NotExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_13AndExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_AndExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right, PyObject *__pyx_v_additional_operands); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13AndExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_AndExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_13AndExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_AndExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7pyarrow_8_dataset_12OrExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_OrExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right, PyObject *__pyx_v_additional_operands); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12OrExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_OrExpression *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7pyarrow_8_dataset_12OrExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_OrExpression *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_8EnumBase_14__Pyx_EnumMeta___init__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_parents, PyObject *__pyx_v_dct); /* proto */
static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumMeta_2__iter__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumMeta_4__getitem__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_cls, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumMeta_6__reduce_cython__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumMeta_8__setstate_cython__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumBase___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_value, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumBase_2__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumBase_4__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_8EnumBase___pyx_unpickle___Pyx_EnumMeta(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileFormat(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ParquetFileFormat(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Partitioning(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_PartitioningFactory(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_DirectoryPartitioning(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_HivePartitioning(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileSystemFactoryOptions(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_SourceFactory(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileSystemSourceFactory(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Source(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_TreeSource(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileSystemSource(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_DatasetFactory(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Dataset(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ScanTask(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Scanner(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Expression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_UnaryExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_BinaryExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ScalarExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FieldExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ComparisonExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_IsValidExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_CastExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_InExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_NotExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_AndExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset_OrExpression(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct__to_batches(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct_1_execute(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct_2_scan(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new___Pyx_EnumMeta(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_int_222419149;
static PyObject *__pyx_tuple__2;
static PyObject *__pyx_tuple__3;
static PyObject *__pyx_tuple__4;
static PyObject *__pyx_tuple__5;
static PyObject *__pyx_tuple__6;
static PyObject *__pyx_tuple__7;
static PyObject *__pyx_tuple__8;
static PyObject *__pyx_tuple__9;
static PyObject *__pyx_tuple__10;
static PyObject *__pyx_tuple__11;
static PyObject *__pyx_tuple__12;
static PyObject *__pyx_tuple__13;
static PyObject *__pyx_tuple__14;
static PyObject *__pyx_tuple__15;
static PyObject *__pyx_tuple__16;
static PyObject *__pyx_tuple__17;
static PyObject *__pyx_tuple__18;
static PyObject *__pyx_tuple__19;
static PyObject *__pyx_tuple__20;
static PyObject *__pyx_tuple__21;
static PyObject *__pyx_tuple__22;
static PyObject *__pyx_tuple__23;
static PyObject *__pyx_tuple__24;
static PyObject *__pyx_tuple__25;
static PyObject *__pyx_tuple__26;
static PyObject *__pyx_tuple__27;
static PyObject *__pyx_tuple__28;
static PyObject *__pyx_tuple__29;
static PyObject *__pyx_tuple__30;
static PyObject *__pyx_tuple__31;
static PyObject *__pyx_tuple__32;
static PyObject *__pyx_tuple__33;
static PyObject *__pyx_tuple__34;
static PyObject *__pyx_tuple__35;
static PyObject *__pyx_tuple__36;
static PyObject *__pyx_tuple__37;
static PyObject *__pyx_tuple__38;
static PyObject *__pyx_tuple__39;
static PyObject *__pyx_tuple__40;
static PyObject *__pyx_tuple__41;
static PyObject *__pyx_tuple__42;
static PyObject *__pyx_tuple__43;
static PyObject *__pyx_tuple__44;
static PyObject *__pyx_tuple__45;
static PyObject *__pyx_tuple__46;
static PyObject *__pyx_tuple__47;
static PyObject *__pyx_tuple__48;
static PyObject *__pyx_tuple__49;
static PyObject *__pyx_tuple__50;
static PyObject *__pyx_tuple__51;
static PyObject *__pyx_tuple__52;
static PyObject *__pyx_tuple__53;
static PyObject *__pyx_tuple__54;
static PyObject *__pyx_tuple__55;
static PyObject *__pyx_tuple__56;
static PyObject *__pyx_tuple__57;
static PyObject *__pyx_tuple__58;
static PyObject *__pyx_tuple__59;
static PyObject *__pyx_tuple__60;
static PyObject *__pyx_tuple__61;
static PyObject *__pyx_tuple__62;
static PyObject *__pyx_tuple__64;
static PyObject *__pyx_tuple__66;
static PyObject *__pyx_tuple__68;
static PyObject *__pyx_tuple__70;
static PyObject *__pyx_tuple__72;
static PyObject *__pyx_tuple__73;
static PyObject *__pyx_tuple__75;
static PyObject *__pyx_tuple__77;
static PyObject *__pyx_codeobj__63;
static PyObject *__pyx_codeobj__65;
static PyObject *__pyx_codeobj__67;
static PyObject *__pyx_codeobj__69;
static PyObject *__pyx_codeobj__71;
static PyObject *__pyx_codeobj__74;
static PyObject *__pyx_codeobj__76;
static PyObject *__pyx_codeobj__78;
/* Late includes */

/* "pyarrow/_dataset.pyx":35
 * 
 * 
 * def _forbid_instantiation(klass, subclasses_instead=True):             # <<<<<<<<<<<<<<
 *     msg = '{} is an abstract class thus cannot be initialized.'.format(
 *         klass.__name__
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_1_forbid_instantiation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_7pyarrow_8_dataset_1_forbid_instantiation = {"_forbid_instantiation", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_1_forbid_instantiation, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7pyarrow_8_dataset_1_forbid_instantiation(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_klass = 0;
  PyObject *__pyx_v_subclasses_instead = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_forbid_instantiation (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_klass,&__pyx_n_s_subclasses_instead,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_True);
    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_klass)) != 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_subclasses_instead);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_forbid_instantiation") < 0)) __PYX_ERR(0, 35, __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_klass = values[0];
    __pyx_v_subclasses_instead = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_forbid_instantiation", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 35, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset._forbid_instantiation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset__forbid_instantiation(__pyx_self, __pyx_v_klass, __pyx_v_subclasses_instead);

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

static PyObject *__pyx_pf_7pyarrow_8_dataset__forbid_instantiation(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_klass, PyObject *__pyx_v_subclasses_instead) {
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_v_subclasses = NULL;
  PyObject *__pyx_7genexpr__pyx_v_cls = 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;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  __Pyx_RefNannySetupContext("_forbid_instantiation", 0);

  /* "pyarrow/_dataset.pyx":36
 * 
 * def _forbid_instantiation(klass, subclasses_instead=True):
 *     msg = '{} is an abstract class thus cannot be initialized.'.format(             # <<<<<<<<<<<<<<
 *         klass.__name__
 *     )
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_is_an_abstract_class_thus_canno, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pyarrow/_dataset.pyx":37
 * def _forbid_instantiation(klass, subclasses_instead=True):
 *     msg = '{} is an abstract class thus cannot be initialized.'.format(
 *         klass.__name__             # <<<<<<<<<<<<<<
 *     )
 *     if subclasses_instead:
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_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, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_msg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":39
 *         klass.__name__
 *     )
 *     if subclasses_instead:             # <<<<<<<<<<<<<<
 *         subclasses = [cls.__name__ for cls in klass.__subclasses__]
 *         msg += ' Use one of the subclasses instead: {}'.format(
 */
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_subclasses_instead); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 39, __pyx_L1_error)
  if (__pyx_t_5) {

    /* "pyarrow/_dataset.pyx":40
 *     )
 *     if subclasses_instead:
 *         subclasses = [cls.__name__ for cls in klass.__subclasses__]             # <<<<<<<<<<<<<<
 *         msg += ' Use one of the subclasses instead: {}'.format(
 *             ', '.join(subclasses)
 */
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_klass, __pyx_n_s_subclasses); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
        __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
      } else {
        __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 40, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 40, __pyx_L6_error)
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      for (;;) {
        if (likely(!__pyx_t_7)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 40, __pyx_L6_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          } else {
            if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 40, __pyx_L6_error)
            #else
            __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_2);
            #endif
          }
        } else {
          __pyx_t_2 = __pyx_t_7(__pyx_t_3);
          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, 40, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_cls, __pyx_t_2);
        __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_7genexpr__pyx_v_cls, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 40, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_cls); __pyx_7genexpr__pyx_v_cls = 0;
      goto __pyx_L9_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_cls); __pyx_7genexpr__pyx_v_cls = 0;
      goto __pyx_L1_error;
      __pyx_L9_exit_scope:;
    } /* exit inner scope */
    __pyx_v_subclasses = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":41
 *     if subclasses_instead:
 *         subclasses = [cls.__name__ for cls in klass.__subclasses__]
 *         msg += ' Use one of the subclasses instead: {}'.format(             # <<<<<<<<<<<<<<
 *             ', '.join(subclasses)
 *         )
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Use_one_of_the_subclasses_inste, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 41, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "pyarrow/_dataset.pyx":42
 *         subclasses = [cls.__name__ for cls in klass.__subclasses__]
 *         msg += ' Use one of the subclasses instead: {}'.format(
 *             ', '.join(subclasses)             # <<<<<<<<<<<<<<
 *         )
 *     raise TypeError(msg)
 */
    __pyx_t_2 = PyUnicode_Join(__pyx_kp_u_, __pyx_v_subclasses); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pyarrow/_dataset.pyx":41
 *     if subclasses_instead:
 *         subclasses = [cls.__name__ for cls in klass.__subclasses__]
 *         msg += ' Use one of the subclasses instead: {}'.format(             # <<<<<<<<<<<<<<
 *             ', '.join(subclasses)
 *         )
 */
    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_msg, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 41, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyarrow/_dataset.pyx":39
 *         klass.__name__
 *     )
 *     if subclasses_instead:             # <<<<<<<<<<<<<<
 *         subclasses = [cls.__name__ for cls in klass.__subclasses__]
 *         msg += ' Use one of the subclasses instead: {}'.format(
 */
  }

  /* "pyarrow/_dataset.pyx":44
 *             ', '.join(subclasses)
 *         )
 *     raise TypeError(msg)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_v_msg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __PYX_ERR(0, 44, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":35
 * 
 * 
 * def _forbid_instantiation(klass, subclasses_instead=True):             # <<<<<<<<<<<<<<
 *     msg = '{} is an abstract class thus cannot be initialized.'.format(
 *         klass.__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._dataset._forbid_instantiation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_subclasses);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_cls);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":53
 *         CFileFormat* format
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_10FileFormat___init__(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":54
 * 
 *     def __init__(self):
 *         _forbid_instantiation(self.__class__)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CFileFormat]& sp):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_forbid_instantiation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __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, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":53
 *         CFileFormat* format
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

/* "pyarrow/_dataset.pyx":56
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef void init(self, const shared_ptr[CFileFormat]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.format = sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_10FileFormat_init(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self, std::shared_ptr<arrow::dataset::FileFormat>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":57
 * 
 *     cdef void init(self, const shared_ptr[CFileFormat]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.format = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":58
 *     cdef void init(self, const shared_ptr[CFileFormat]& sp):
 *         self.wrapped = sp
 *         self.format = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->format = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":56
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef void init(self, const shared_ptr[CFileFormat]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.format = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":61
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CFileFormat]& sp):             # <<<<<<<<<<<<<<
 *         cdef FileFormat self
 * 
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_10FileFormat_wrap(std::shared_ptr<arrow::dataset::FileFormat>  &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self = 0;
  PyObject *__pyx_v_typ = 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;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":64
 *         cdef FileFormat self
 * 
 *         typ = frombytes(sp.get().type_name())             # <<<<<<<<<<<<<<
 *         if typ == 'parquet':
 *             self = ParquetFileFormat.__new__(ParquetFileFormat)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_sp.get()->type_name()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 64, __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, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_typ = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":65
 * 
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'parquet':             # <<<<<<<<<<<<<<
 *             self = ParquetFileFormat.__new__(ParquetFileFormat)
 *         else:
 */
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_typ, __pyx_n_u_parquet, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 65, __pyx_L1_error)
  if (likely(__pyx_t_5)) {

    /* "pyarrow/_dataset.pyx":66
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'parquet':
 *             self = ParquetFileFormat.__new__(ParquetFileFormat)             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError(typ)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_ParquetFileFormat(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_ParquetFileFormat), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_FileFormat)))) __PYX_ERR(0, 66, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_FileFormat *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":65
 * 
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'parquet':             # <<<<<<<<<<<<<<
 *             self = ParquetFileFormat.__new__(ParquetFileFormat)
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":68
 *             self = ParquetFileFormat.__new__(ParquetFileFormat)
 *         else:
 *             raise TypeError(typ)             # <<<<<<<<<<<<<<
 * 
 *         self.init(sp)
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_v_typ); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __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, 68, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "pyarrow/_dataset.pyx":70
 *             raise TypeError(typ)
 * 
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_FileFormat *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":71
 * 
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CFileFormat] unwrap(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":61
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CFileFormat]& sp):             # <<<<<<<<<<<<<<
 *         cdef FileFormat self
 * 
 */

  /* 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._dataset.FileFormat.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_self);
  __Pyx_XDECREF(__pyx_v_typ);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":73
 *         return self
 * 
 *     cdef inline shared_ptr[CFileFormat] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr<arrow::dataset::FileFormat>  __pyx_f_7pyarrow_8_dataset_10FileFormat_unwrap(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::FileFormat>  __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("unwrap", 0);

  /* "pyarrow/_dataset.pyx":74
 * 
 *     cdef inline shared_ptr[CFileFormat] unwrap(self):
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":73
 *         return self
 * 
 *     cdef inline shared_ptr[CFileFormat] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10FileFormat_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10FileFormat_3__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_dataset_10FileFormat_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileFormat *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10FileFormat_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__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("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__2, 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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.FileFormat.__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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10FileFormat_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10FileFormat_5__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_dataset_10FileFormat_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileFormat *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10FileFormat_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, 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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":79
 * cdef class ParquetFileFormat(FileFormat):
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         self.init(shared_ptr[CFileFormat](new CParquetFileFormat()))
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_17ParquetFileFormat___init__(struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  arrow::dataset::ParquetFileFormat *__pyx_t_1;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":80
 * 
 *     def __init__(self):
 *         self.init(shared_ptr[CFileFormat](new CParquetFileFormat()))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  try {
    __pyx_t_1 = new arrow::dataset::ParquetFileFormat();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 80, __pyx_L1_error)
  }
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_ParquetFileFormat *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_FileFormat *)__pyx_v_self), std::shared_ptr<arrow::dataset::FileFormat> (__pyx_t_1));

  /* "pyarrow/_dataset.pyx":79
 * cdef class ParquetFileFormat(FileFormat):
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         self.init(shared_ptr[CFileFormat](new CParquetFileFormat()))
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._dataset.ParquetFileFormat.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_17ParquetFileFormat_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_17ParquetFileFormat_3__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_dataset_17ParquetFileFormat_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_17ParquetFileFormat_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *__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("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, 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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.ParquetFileFormat.__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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_17ParquetFileFormat_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_17ParquetFileFormat_5__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_dataset_17ParquetFileFormat_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_17ParquetFileFormat_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *__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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, 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("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":89
 *         CPartitioning* partitioning
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_12Partitioning___init__(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":90
 * 
 *     def __init__(self):
 *         _forbid_instantiation(self.__class__)             # <<<<<<<<<<<<<<
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_forbid_instantiation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __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, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":89
 *         CPartitioning* partitioning
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

/* "pyarrow/_dataset.pyx":92
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.partitioning = sp.get()
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_12Partitioning_init(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self, std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":93
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.partitioning = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":94
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 *         self.wrapped = sp
 *         self.partitioning = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->partitioning = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":92
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.partitioning = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":97
 * 
 *     @staticmethod
 *     cdef wrap(const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         cdef Partitioning self
 * 
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_12Partitioning_wrap(std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self = 0;
  PyObject *__pyx_v_typ = 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;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":100
 *         cdef Partitioning self
 * 
 *         typ = frombytes(sp.get().type_name())             # <<<<<<<<<<<<<<
 *         if typ == 'schema':
 *             self = DirectoryPartitioning.__new__(DirectoryPartitioning)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_sp.get()->type_name()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __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, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_typ = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":101
 * 
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'schema':             # <<<<<<<<<<<<<<
 *             self = DirectoryPartitioning.__new__(DirectoryPartitioning)
 *         elif typ == 'hive':
 */
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_typ, __pyx_n_u_schema, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 101, __pyx_L1_error)
  if (__pyx_t_5) {

    /* "pyarrow/_dataset.pyx":102
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'schema':
 *             self = DirectoryPartitioning.__new__(DirectoryPartitioning)             # <<<<<<<<<<<<<<
 *         elif typ == 'hive':
 *             self = HivePartitioning.__new__(HivePartitioning)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_DirectoryPartitioning(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Partitioning)))) __PYX_ERR(0, 102, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":101
 * 
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'schema':             # <<<<<<<<<<<<<<
 *             self = DirectoryPartitioning.__new__(DirectoryPartitioning)
 *         elif typ == 'hive':
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":103
 *         if typ == 'schema':
 *             self = DirectoryPartitioning.__new__(DirectoryPartitioning)
 *         elif typ == 'hive':             # <<<<<<<<<<<<<<
 *             self = HivePartitioning.__new__(HivePartitioning)
 *         else:
 */
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_typ, __pyx_n_u_hive, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 103, __pyx_L1_error)
  if (likely(__pyx_t_5)) {

    /* "pyarrow/_dataset.pyx":104
 *             self = DirectoryPartitioning.__new__(DirectoryPartitioning)
 *         elif typ == 'hive':
 *             self = HivePartitioning.__new__(HivePartitioning)             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError(typ)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_HivePartitioning(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_HivePartitioning), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Partitioning)))) __PYX_ERR(0, 104, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":103
 *         if typ == 'schema':
 *             self = DirectoryPartitioning.__new__(DirectoryPartitioning)
 *         elif typ == 'hive':             # <<<<<<<<<<<<<<
 *             self = HivePartitioning.__new__(HivePartitioning)
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":106
 *             self = HivePartitioning.__new__(HivePartitioning)
 *         else:
 *             raise TypeError(typ)             # <<<<<<<<<<<<<<
 * 
 *         self.init(sp)
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_v_typ); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 106, __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, 106, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "pyarrow/_dataset.pyx":108
 *             raise TypeError(typ)
 * 
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":109
 * 
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CPartitioning] unwrap(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":97
 * 
 *     @staticmethod
 *     cdef wrap(const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         cdef Partitioning self
 * 
 */

  /* 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._dataset.Partitioning.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_self);
  __Pyx_XDECREF(__pyx_v_typ);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":111
 *         return self
 * 
 *     cdef inline shared_ptr[CPartitioning] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr<arrow::dataset::Partitioning>  __pyx_f_7pyarrow_8_dataset_12Partitioning_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::Partitioning>  __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("unwrap", 0);

  /* "pyarrow/_dataset.pyx":112
 * 
 *     cdef inline shared_ptr[CPartitioning] unwrap(self):
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 *     def parse(self, path):
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":111
 *         return self
 * 
 *     cdef inline shared_ptr[CPartitioning] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "pyarrow/_dataset.pyx":114
 *         return self.wrapped
 * 
 *     def parse(self, path):             # <<<<<<<<<<<<<<
 *         cdef CResult[shared_ptr[CExpression]] result
 *         result = self.partitioning.Parse(tobytes(path))
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_3parse(PyObject *__pyx_v_self, PyObject *__pyx_v_path); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_3parse(PyObject *__pyx_v_self, PyObject *__pyx_v_path) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("parse (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_12Partitioning_2parse(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self), ((PyObject *)__pyx_v_path));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_12Partitioning_2parse(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_self, PyObject *__pyx_v_path) {
  arrow::Result<std::shared_ptr<arrow::dataset::Expression> >  __pyx_v_result;
  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;
  std::shared_ptr<arrow::dataset::Expression>  __pyx_t_5;
  __Pyx_RefNannySetupContext("parse", 0);

  /* "pyarrow/_dataset.pyx":116
 *     def parse(self, path):
 *         cdef CResult[shared_ptr[CExpression]] result
 *         result = self.partitioning.Parse(tobytes(path))             # <<<<<<<<<<<<<<
 *         return Expression.wrap(GetResultValue(result))
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __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, 116, __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, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_result = __pyx_v_self->partitioning->Parse(__pyx_t_4);

  /* "pyarrow/_dataset.pyx":117
 *         cdef CResult[shared_ptr[CExpression]] result
 *         result = self.partitioning.Parse(tobytes(path))
 *         return Expression.wrap(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::Expression> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 117, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_10Expression_wrap(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":114
 *         return self.wrapped
 * 
 *     def parse(self, path):             # <<<<<<<<<<<<<<
 *         cdef CResult[shared_ptr[CExpression]] result
 *         result = self.partitioning.Parse(tobytes(path))
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.Partitioning.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":120
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         """The arrow Schema attached to the partitioning."""
 *         return pyarrow_wrap_schema(self.partitioning.schema())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_6schema_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_6schema_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_12Partitioning_6schema___get__(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self));

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

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

  /* "pyarrow/_dataset.pyx":122
 *     def schema(self):
 *         """The arrow Schema attached to the partitioning."""
 *         return pyarrow_wrap_schema(self.partitioning.schema())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_v_self->partitioning->schema()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":120
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         """The arrow Schema attached to the partitioning."""
 *         return pyarrow_wrap_schema(self.partitioning.schema())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Partitioning.schema.__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("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_5__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_dataset_12Partitioning_4__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_12Partitioning_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__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("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, 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("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Partitioning.__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("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12Partitioning_7__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_dataset_12Partitioning_6__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_12Partitioning_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__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("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, 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("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":131
 *         CPartitioningFactory* factory
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_19PartitioningFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":132
 * 
 *     def __init__(self):
 *         _forbid_instantiation(self.__class__)             # <<<<<<<<<<<<<<
 * 
 *     cdef init(self, const shared_ptr[CPartitioningFactory]& sp):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_forbid_instantiation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 132, __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, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":131
 *         CPartitioningFactory* factory
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

/* "pyarrow/_dataset.pyx":134
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef init(self, const shared_ptr[CPartitioningFactory]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.factory = sp.get()
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_init(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::PartitioningFactory>  const &__pyx_v_sp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":135
 * 
 *     cdef init(self, const shared_ptr[CPartitioningFactory]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.factory = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":136
 *     cdef init(self, const shared_ptr[CPartitioningFactory]& sp):
 *         self.wrapped = sp
 *         self.factory = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->factory = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":134
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef init(self, const shared_ptr[CPartitioningFactory]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.factory = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":139
 * 
 *     @staticmethod
 *     cdef wrap(const shared_ptr[CPartitioningFactory]& sp):             # <<<<<<<<<<<<<<
 *         cdef PartitioningFactory self = PartitioningFactory.__new__(
 *             PartitioningFactory
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_wrap(std::shared_ptr<arrow::dataset::PartitioningFactory>  const &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":140
 *     @staticmethod
 *     cdef wrap(const shared_ptr[CPartitioningFactory]& sp):
 *         cdef PartitioningFactory self = PartitioningFactory.__new__(             # <<<<<<<<<<<<<<
 *             PartitioningFactory
 *         )
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_PartitioningFactory(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_PartitioningFactory), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":143
 *             PartitioningFactory
 *         )
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_7pyarrow_8_dataset_PartitioningFactory *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":144
 *         )
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CPartitioningFactory] unwrap(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":139
 * 
 *     @staticmethod
 *     cdef wrap(const shared_ptr[CPartitioningFactory]& sp):             # <<<<<<<<<<<<<<
 *         cdef PartitioningFactory self = PartitioningFactory.__new__(
 *             PartitioningFactory
 */

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

/* "pyarrow/_dataset.pyx":146
 *         return self
 * 
 *     cdef inline shared_ptr[CPartitioningFactory] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr<arrow::dataset::PartitioningFactory>  __pyx_f_7pyarrow_8_dataset_19PartitioningFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::PartitioningFactory>  __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("unwrap", 0);

  /* "pyarrow/_dataset.pyx":147
 * 
 *     cdef inline shared_ptr[CPartitioningFactory] unwrap(self):
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":146
 *         return self
 * 
 *     cdef inline shared_ptr[CPartitioningFactory] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_19PartitioningFactory_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_19PartitioningFactory_3__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_dataset_19PartitioningFactory_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_19PartitioningFactory_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, 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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.PartitioningFactory.__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_19PartitioningFactory_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_19PartitioningFactory_5__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_dataset_19PartitioningFactory_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_19PartitioningFactory_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, 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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":180
 *         CDirectoryPartitioning* directory_partitioning
 * 
 *     def __init__(self, Schema schema not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CDirectoryPartitioning] partitioning
 *         partitioning = make_shared[CDirectoryPartitioning](
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema,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_schema)) != 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, "__init__") < 0)) __PYX_ERR(0, 180, __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_schema = ((struct __pyx_obj_7pyarrow_3lib_Schema *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 180, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.DirectoryPartitioning.__init__", __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, 0, "schema", 0))) __PYX_ERR(0, 180, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning___init__(((struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *)__pyx_v_self), __pyx_v_schema);

  /* 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_dataset_21DirectoryPartitioning___init__(struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema) {
  std::shared_ptr<arrow::dataset::DirectoryPartitioning>  __pyx_v_partitioning;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  std::shared_ptr<arrow::dataset::DirectoryPartitioning>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":182
 *     def __init__(self, Schema schema not None):
 *         cdef shared_ptr[CDirectoryPartitioning] partitioning
 *         partitioning = make_shared[CDirectoryPartitioning](             # <<<<<<<<<<<<<<
 *             pyarrow_unwrap_schema(schema)
 *         )
 */
  try {
    __pyx_t_1 = std::make_shared<arrow::dataset::DirectoryPartitioning>(__pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(((PyObject *)__pyx_v_schema)));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 182, __pyx_L1_error)
  }
  __pyx_v_partitioning = __pyx_t_1;

  /* "pyarrow/_dataset.pyx":185
 *             pyarrow_unwrap_schema(schema)
 *         )
 *         self.init(<shared_ptr[CPartitioning]> partitioning)             # <<<<<<<<<<<<<<
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 */
  __pyx_t_2 = ((struct __pyx_vtabstruct_7pyarrow_8_dataset_DirectoryPartitioning *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self), ((std::shared_ptr<arrow::dataset::Partitioning> )__pyx_v_partitioning)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":180
 *         CDirectoryPartitioning* directory_partitioning
 * 
 *     def __init__(self, Schema schema not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CDirectoryPartitioning] partitioning
 *         partitioning = make_shared[CDirectoryPartitioning](
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.DirectoryPartitioning.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":187
 *         self.init(<shared_ptr[CPartitioning]> partitioning)
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         Partitioning.init(self, sp)
 *         self.directory_partitioning = <CDirectoryPartitioning*> sp.get()
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_21DirectoryPartitioning_init(struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__pyx_v_self, std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":188
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 *         Partitioning.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.directory_partitioning = <CDirectoryPartitioning*> sp.get()
 * 
 */
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_12Partitioning_init(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self), __pyx_v_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":189
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 *         Partitioning.init(self, sp)
 *         self.directory_partitioning = <CDirectoryPartitioning*> sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->directory_partitioning = ((arrow::dataset::DirectoryPartitioning *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":187
 *         self.init(<shared_ptr[CPartitioning]> partitioning)
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         Partitioning.init(self, sp)
 *         self.directory_partitioning = <CDirectoryPartitioning*> sp.get()
 */

  /* 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._dataset.DirectoryPartitioning.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":192
 * 
 *     @staticmethod
 *     def discover(field_names):             # <<<<<<<<<<<<<<
 *         """
 *         Discover a DirectoryPartitioning.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_3discover(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_21DirectoryPartitioning_2discover[] = "\n        Discover a DirectoryPartitioning.\n\n        Parameters\n        ----------\n        field_names : list of str\n            The names to associate with the values from the subdirectory names.\n\n        Returns\n        -------\n        DirectoryPartitioningFactory\n            To be used in the FileSystemFactoryOptions.\n        ";
static PyMethodDef __pyx_mdef_7pyarrow_8_dataset_21DirectoryPartitioning_3discover = {"discover", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_3discover, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_21DirectoryPartitioning_2discover};
static PyObject *__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_3discover(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_field_names = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("discover (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_field_names,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_field_names)) != 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, "discover") < 0)) __PYX_ERR(0, 192, __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_field_names = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("discover", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 192, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.DirectoryPartitioning.discover", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning_2discover(__pyx_v_field_names);

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning_2discover(PyObject *__pyx_v_field_names) {
  struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_factory = 0;
  std::vector<std::string>  __pyx_v_c_field_names;
  PyObject *__pyx_8genexpr1__pyx_v_s = 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;
  std::vector<std::string>  __pyx_t_8;
  __Pyx_RefNannySetupContext("discover", 0);

  /* "pyarrow/_dataset.pyx":209
 *             PartitioningFactory factory
 *             vector[c_string] c_field_names
 *         c_field_names = [tobytes(s) for s in field_names]             # <<<<<<<<<<<<<<
 *         factory = PartitioningFactory.wrap(
 *             CDirectoryPartitioning.MakeFactory(c_field_names))
 */
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_field_names)) || PyTuple_CheckExact(__pyx_v_field_names)) {
      __pyx_t_2 = __pyx_v_field_names; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_field_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 209, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 209, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 209, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 209, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_s, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 209, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_8genexpr1__pyx_v_s) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_8genexpr1__pyx_v_s);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 209, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 209, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_s); __pyx_8genexpr1__pyx_v_s = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_s); __pyx_8genexpr1__pyx_v_s = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_8 = __pyx_convert_vector_from_py_std_3a__3a_string(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 209, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_field_names = __pyx_t_8;

  /* "pyarrow/_dataset.pyx":210
 *             vector[c_string] c_field_names
 *         c_field_names = [tobytes(s) for s in field_names]
 *         factory = PartitioningFactory.wrap(             # <<<<<<<<<<<<<<
 *             CDirectoryPartitioning.MakeFactory(c_field_names))
 *         return factory
 */
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_19PartitioningFactory_wrap(arrow::dataset::DirectoryPartitioning::MakeFactory(__pyx_v_c_field_names)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __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_dataset_PartitioningFactory))))) __PYX_ERR(0, 210, __pyx_L1_error)
  __pyx_v_factory = ((struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":212
 *         factory = PartitioningFactory.wrap(
 *             CDirectoryPartitioning.MakeFactory(c_field_names))
 *         return factory             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_factory));
  __pyx_r = ((PyObject *)__pyx_v_factory);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":192
 * 
 *     @staticmethod
 *     def discover(field_names):             # <<<<<<<<<<<<<<
 *         """
 *         Discover a DirectoryPartitioning.
 */

  /* 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._dataset.DirectoryPartitioning.discover", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_factory);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_5__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_dataset_21DirectoryPartitioning_4__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__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("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__10, 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("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.DirectoryPartitioning.__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("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_7__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_dataset_21DirectoryPartitioning_6__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_21DirectoryPartitioning_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *__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("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__11, 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("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":251
 *         CHivePartitioning* hive_partitioning
 * 
 *     def __init__(self, Schema schema not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CHivePartitioning] partitioning
 *         partitioning = make_shared[CHivePartitioning](
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_16HivePartitioning_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_16HivePartitioning_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema,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_schema)) != 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, "__init__") < 0)) __PYX_ERR(0, 251, __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_schema = ((struct __pyx_obj_7pyarrow_3lib_Schema *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 251, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.HivePartitioning.__init__", __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, 0, "schema", 0))) __PYX_ERR(0, 251, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_16HivePartitioning___init__(((struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *)__pyx_v_self), __pyx_v_schema);

  /* 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_dataset_16HivePartitioning___init__(struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema) {
  std::shared_ptr<arrow::dataset::HivePartitioning>  __pyx_v_partitioning;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  std::shared_ptr<arrow::dataset::HivePartitioning>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":253
 *     def __init__(self, Schema schema not None):
 *         cdef shared_ptr[CHivePartitioning] partitioning
 *         partitioning = make_shared[CHivePartitioning](             # <<<<<<<<<<<<<<
 *             pyarrow_unwrap_schema(schema)
 *         )
 */
  try {
    __pyx_t_1 = std::make_shared<arrow::dataset::HivePartitioning>(__pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(((PyObject *)__pyx_v_schema)));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 253, __pyx_L1_error)
  }
  __pyx_v_partitioning = __pyx_t_1;

  /* "pyarrow/_dataset.pyx":256
 *             pyarrow_unwrap_schema(schema)
 *         )
 *         self.init(<shared_ptr[CPartitioning]> partitioning)             # <<<<<<<<<<<<<<
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 */
  __pyx_t_2 = ((struct __pyx_vtabstruct_7pyarrow_8_dataset_HivePartitioning *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self), ((std::shared_ptr<arrow::dataset::Partitioning> )__pyx_v_partitioning)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":251
 *         CHivePartitioning* hive_partitioning
 * 
 *     def __init__(self, Schema schema not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CHivePartitioning] partitioning
 *         partitioning = make_shared[CHivePartitioning](
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.HivePartitioning.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":258
 *         self.init(<shared_ptr[CPartitioning]> partitioning)
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         Partitioning.init(self, sp)
 *         self.hive_partitioning = <CHivePartitioning*> sp.get()
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_16HivePartitioning_init(struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__pyx_v_self, std::shared_ptr<arrow::dataset::Partitioning>  const &__pyx_v_sp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":259
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 *         Partitioning.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.hive_partitioning = <CHivePartitioning*> sp.get()
 * 
 */
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_12Partitioning_init(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_self), __pyx_v_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":260
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):
 *         Partitioning.init(self, sp)
 *         self.hive_partitioning = <CHivePartitioning*> sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->hive_partitioning = ((arrow::dataset::HivePartitioning *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":258
 *         self.init(<shared_ptr[CPartitioning]> partitioning)
 * 
 *     cdef init(self, const shared_ptr[CPartitioning]& sp):             # <<<<<<<<<<<<<<
 *         Partitioning.init(self, sp)
 *         self.hive_partitioning = <CHivePartitioning*> sp.get()
 */

  /* 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._dataset.HivePartitioning.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":263
 * 
 *     @staticmethod
 *     def discover():             # <<<<<<<<<<<<<<
 *         """
 *         Discover a HivePartitioning.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_3discover(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_16HivePartitioning_2discover[] = "\n        Discover a HivePartitioning.\n\n        Returns\n        -------\n        PartitioningFactory\n            To be used in the FileSystemFactoryOptions.\n        ";
static PyMethodDef __pyx_mdef_7pyarrow_8_dataset_16HivePartitioning_3discover = {"discover", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_3discover, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_16HivePartitioning_2discover};
static PyObject *__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_3discover(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("discover (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("discover", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "discover", 0))) return NULL;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_16HivePartitioning_2discover();

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16HivePartitioning_2discover(void) {
  struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_factory = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("discover", 0);

  /* "pyarrow/_dataset.pyx":274
 *         cdef:
 *             PartitioningFactory factory
 *         factory = PartitioningFactory.wrap(             # <<<<<<<<<<<<<<
 *             CHivePartitioning.MakeFactory())
 *         return factory
 */
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_19PartitioningFactory_wrap(arrow::dataset::HivePartitioning::MakeFactory()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __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_dataset_PartitioningFactory))))) __PYX_ERR(0, 274, __pyx_L1_error)
  __pyx_v_factory = ((struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":276
 *         factory = PartitioningFactory.wrap(
 *             CHivePartitioning.MakeFactory())
 *         return factory             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_factory));
  __pyx_r = ((PyObject *)__pyx_v_factory);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":263
 * 
 *     @staticmethod
 *     def discover():             # <<<<<<<<<<<<<<
 *         """
 *         Discover a HivePartitioning.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.HivePartitioning.discover", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_factory);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_5__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_dataset_16HivePartitioning_4__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16HivePartitioning_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__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("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__12, 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("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.HivePartitioning.__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("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_7__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_dataset_16HivePartitioning_6__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16HivePartitioning_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *__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("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__13, 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("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":308
 *     __slots__ = ()  # avoid mistakingly creating attributes
 * 
 *     def __init__(self, partition_base_dir=None, exclude_invalid_files=None,             # <<<<<<<<<<<<<<
 *                  list ignore_prefixes=None):
 *         if partition_base_dir is not None:
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_partition_base_dir = 0;
  PyObject *__pyx_v_exclude_invalid_files = 0;
  PyObject *__pyx_v_ignore_prefixes = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_partition_base_dir,&__pyx_n_s_exclude_invalid_files,&__pyx_n_s_ignore_prefixes,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);

    /* "pyarrow/_dataset.pyx":309
 * 
 *     def __init__(self, partition_base_dir=None, exclude_invalid_files=None,
 *                  list ignore_prefixes=None):             # <<<<<<<<<<<<<<
 *         if partition_base_dir is not None:
 *             self.partition_base_dir = partition_base_dir
 */
    values[2] = ((PyObject*)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_partition_base_dir);
          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_exclude_invalid_files);
          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_ignore_prefixes);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 308, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_partition_base_dir = values[0];
    __pyx_v_exclude_invalid_files = values[1];
    __pyx_v_ignore_prefixes = ((PyObject*)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 308, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ignore_prefixes), (&PyList_Type), 1, "ignore_prefixes", 1))) __PYX_ERR(0, 309, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions___init__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self), __pyx_v_partition_base_dir, __pyx_v_exclude_invalid_files, __pyx_v_ignore_prefixes);

  /* "pyarrow/_dataset.pyx":308
 *     __slots__ = ()  # avoid mistakingly creating attributes
 * 
 *     def __init__(self, partition_base_dir=None, exclude_invalid_files=None,             # <<<<<<<<<<<<<<
 *                  list ignore_prefixes=None):
 *         if partition_base_dir is not 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_dataset_24FileSystemFactoryOptions___init__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, PyObject *__pyx_v_partition_base_dir, PyObject *__pyx_v_exclude_invalid_files, PyObject *__pyx_v_ignore_prefixes) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":310
 *     def __init__(self, partition_base_dir=None, exclude_invalid_files=None,
 *                  list ignore_prefixes=None):
 *         if partition_base_dir is not None:             # <<<<<<<<<<<<<<
 *             self.partition_base_dir = partition_base_dir
 *         if exclude_invalid_files is not None:
 */
  __pyx_t_1 = (__pyx_v_partition_base_dir != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_dataset.pyx":311
 *                  list ignore_prefixes=None):
 *         if partition_base_dir is not None:
 *             self.partition_base_dir = partition_base_dir             # <<<<<<<<<<<<<<
 *         if exclude_invalid_files is not None:
 *             self.exclude_invalid_files = exclude_invalid_files
 */
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_partition_base_dir, __pyx_v_partition_base_dir) < 0) __PYX_ERR(0, 311, __pyx_L1_error)

    /* "pyarrow/_dataset.pyx":310
 *     def __init__(self, partition_base_dir=None, exclude_invalid_files=None,
 *                  list ignore_prefixes=None):
 *         if partition_base_dir is not None:             # <<<<<<<<<<<<<<
 *             self.partition_base_dir = partition_base_dir
 *         if exclude_invalid_files is not None:
 */
  }

  /* "pyarrow/_dataset.pyx":312
 *         if partition_base_dir is not None:
 *             self.partition_base_dir = partition_base_dir
 *         if exclude_invalid_files is not None:             # <<<<<<<<<<<<<<
 *             self.exclude_invalid_files = exclude_invalid_files
 *         if ignore_prefixes is not None:
 */
  __pyx_t_2 = (__pyx_v_exclude_invalid_files != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_dataset.pyx":313
 *             self.partition_base_dir = partition_base_dir
 *         if exclude_invalid_files is not None:
 *             self.exclude_invalid_files = exclude_invalid_files             # <<<<<<<<<<<<<<
 *         if ignore_prefixes is not None:
 *             self.ignore_prefixes = ignore_prefixes
 */
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_exclude_invalid_files, __pyx_v_exclude_invalid_files) < 0) __PYX_ERR(0, 313, __pyx_L1_error)

    /* "pyarrow/_dataset.pyx":312
 *         if partition_base_dir is not None:
 *             self.partition_base_dir = partition_base_dir
 *         if exclude_invalid_files is not None:             # <<<<<<<<<<<<<<
 *             self.exclude_invalid_files = exclude_invalid_files
 *         if ignore_prefixes is not None:
 */
  }

  /* "pyarrow/_dataset.pyx":314
 *         if exclude_invalid_files is not None:
 *             self.exclude_invalid_files = exclude_invalid_files
 *         if ignore_prefixes is not None:             # <<<<<<<<<<<<<<
 *             self.ignore_prefixes = ignore_prefixes
 * 
 */
  __pyx_t_1 = (__pyx_v_ignore_prefixes != ((PyObject*)Py_None));
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_dataset.pyx":315
 *             self.exclude_invalid_files = exclude_invalid_files
 *         if ignore_prefixes is not None:
 *             self.ignore_prefixes = ignore_prefixes             # <<<<<<<<<<<<<<
 * 
 *     cdef inline CFileSystemFactoryOptions unwrap(self):
 */
    if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_ignore_prefixes, __pyx_v_ignore_prefixes) < 0) __PYX_ERR(0, 315, __pyx_L1_error)

    /* "pyarrow/_dataset.pyx":314
 *         if exclude_invalid_files is not None:
 *             self.exclude_invalid_files = exclude_invalid_files
 *         if ignore_prefixes is not None:             # <<<<<<<<<<<<<<
 *             self.ignore_prefixes = ignore_prefixes
 * 
 */
  }

  /* "pyarrow/_dataset.pyx":308
 *     __slots__ = ()  # avoid mistakingly creating attributes
 * 
 *     def __init__(self, partition_base_dir=None, exclude_invalid_files=None,             # <<<<<<<<<<<<<<
 *                  list ignore_prefixes=None):
 *         if partition_base_dir is not None:
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":317
 *             self.ignore_prefixes = ignore_prefixes
 * 
 *     cdef inline CFileSystemFactoryOptions unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.options
 * 
 */

static CYTHON_INLINE arrow::dataset::FileSystemFactoryOptions __pyx_f_7pyarrow_8_dataset_24FileSystemFactoryOptions_unwrap(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self) {
  arrow::dataset::FileSystemFactoryOptions __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("unwrap", 0);

  /* "pyarrow/_dataset.pyx":318
 * 
 *     cdef inline CFileSystemFactoryOptions unwrap(self):
 *         return self.options             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_r = __pyx_v_self->options;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":317
 *             self.ignore_prefixes = ignore_prefixes
 * 
 *     cdef inline CFileSystemFactoryOptions unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.options
 * 
 */

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

/* "pyarrow/_dataset.pyx":321
 * 
 *     @property
 *     def partitioning(self):             # <<<<<<<<<<<<<<
 *         """Partitioning to apply to discovered files.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning___get__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::Partitioning>  __pyx_v_c_partitioning;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_dataset.pyx":326
 *         NOTE: setting this property will overwrite partitioning_factory.
 *         """
 *         c_partitioning = self.options.partitioning.partitioning()             # <<<<<<<<<<<<<<
 *         if c_partitioning.get() == nullptr:
 *             return None
 */
  __pyx_v_c_partitioning = __pyx_v_self->options.partitioning.partitioning();

  /* "pyarrow/_dataset.pyx":327
 *         """
 *         c_partitioning = self.options.partitioning.partitioning()
 *         if c_partitioning.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         return Partitioning.wrap(c_partitioning)
 */
  __pyx_t_1 = ((__pyx_v_c_partitioning.get() == nullptr) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_dataset.pyx":328
 *         c_partitioning = self.options.partitioning.partitioning()
 *         if c_partitioning.get() == nullptr:
 *             return None             # <<<<<<<<<<<<<<
 *         return Partitioning.wrap(c_partitioning)
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pyarrow/_dataset.pyx":327
 *         """
 *         c_partitioning = self.options.partitioning.partitioning()
 *         if c_partitioning.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         return Partitioning.wrap(c_partitioning)
 */
  }

  /* "pyarrow/_dataset.pyx":329
 *         if c_partitioning.get() == nullptr:
 *             return None
 *         return Partitioning.wrap(c_partitioning)             # <<<<<<<<<<<<<<
 * 
 *     @partitioning.setter
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyarrow_8_dataset_12Partitioning_wrap(__pyx_v_c_partitioning); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":321
 * 
 *     @property
 *     def partitioning(self):             # <<<<<<<<<<<<<<
 *         """Partitioning to apply to discovered files.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.partitioning.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":332
 * 
 *     @partitioning.setter
 *     def partitioning(self, Partitioning value):             # <<<<<<<<<<<<<<
 *         self.options.partitioning = (<Partitioning> value).unwrap()
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), __pyx_ptype_7pyarrow_8_dataset_Partitioning, 1, "value", 0))) __PYX_ERR(0, 332, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_2__set__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_value));

  /* 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_dataset_24FileSystemFactoryOptions_12partitioning_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Partitioning *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "pyarrow/_dataset.pyx":333
 *     @partitioning.setter
 *     def partitioning(self, Partitioning value):
 *         self.options.partitioning = (<Partitioning> value).unwrap()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_v_self->options.partitioning = ((arrow::dataset::PartitioningOrFactory)__pyx_f_7pyarrow_8_dataset_12Partitioning_unwrap(((struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)__pyx_v_value)));

  /* "pyarrow/_dataset.pyx":332
 * 
 *     @partitioning.setter
 *     def partitioning(self, Partitioning value):             # <<<<<<<<<<<<<<
 *         self.options.partitioning = (<Partitioning> value).unwrap()
 * 
 */

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

/* "pyarrow/_dataset.pyx":336
 * 
 *     @property
 *     def partitioning_factory(self):             # <<<<<<<<<<<<<<
 *         """PartitioningFactory to apply to discovered files and
 *         discover a Partitioning.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory___get__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::PartitioningFactory>  __pyx_v_c_factory;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_dataset.pyx":342
 *         NOTE: setting this property will overwrite partitioning.
 *         """
 *         c_factory = self.options.partitioning.factory()             # <<<<<<<<<<<<<<
 *         if c_factory.get() == nullptr:
 *             return None
 */
  __pyx_v_c_factory = __pyx_v_self->options.partitioning.factory();

  /* "pyarrow/_dataset.pyx":343
 *         """
 *         c_factory = self.options.partitioning.factory()
 *         if c_factory.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         return PartitioningFactory.wrap(c_factory)
 */
  __pyx_t_1 = ((__pyx_v_c_factory.get() == nullptr) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_dataset.pyx":344
 *         c_factory = self.options.partitioning.factory()
 *         if c_factory.get() == nullptr:
 *             return None             # <<<<<<<<<<<<<<
 *         return PartitioningFactory.wrap(c_factory)
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pyarrow/_dataset.pyx":343
 *         """
 *         c_factory = self.options.partitioning.factory()
 *         if c_factory.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         return PartitioningFactory.wrap(c_factory)
 */
  }

  /* "pyarrow/_dataset.pyx":345
 *         if c_factory.get() == nullptr:
 *             return None
 *         return PartitioningFactory.wrap(c_factory)             # <<<<<<<<<<<<<<
 * 
 *     @partitioning_factory.setter
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __pyx_f_7pyarrow_8_dataset_19PartitioningFactory_wrap(__pyx_v_c_factory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":336
 * 
 *     @property
 *     def partitioning_factory(self):             # <<<<<<<<<<<<<<
 *         """PartitioningFactory to apply to discovered files and
 *         discover a Partitioning.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.partitioning_factory.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":348
 * 
 *     @partitioning_factory.setter
 *     def partitioning_factory(self, PartitioningFactory value):             # <<<<<<<<<<<<<<
 *         self.options.partitioning = (<PartitioningFactory> value).unwrap()
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), __pyx_ptype_7pyarrow_8_dataset_PartitioningFactory, 1, "value", 0))) __PYX_ERR(0, 348, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_2__set__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)__pyx_v_value));

  /* 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_dataset_24FileSystemFactoryOptions_20partitioning_factory_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "pyarrow/_dataset.pyx":349
 *     @partitioning_factory.setter
 *     def partitioning_factory(self, PartitioningFactory value):
 *         self.options.partitioning = (<PartitioningFactory> value).unwrap()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_v_self->options.partitioning = ((arrow::dataset::PartitioningOrFactory)__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_unwrap(((struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)__pyx_v_value)));

  /* "pyarrow/_dataset.pyx":348
 * 
 *     @partitioning_factory.setter
 *     def partitioning_factory(self, PartitioningFactory value):             # <<<<<<<<<<<<<<
 *         self.options.partitioning = (<PartitioningFactory> value).unwrap()
 * 
 */

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

/* "pyarrow/_dataset.pyx":352
 * 
 *     @property
 *     def partition_base_dir(self):             # <<<<<<<<<<<<<<
 *         """
 *         Base directory to strip paths before applying the partitioning.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir___get__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__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/_dataset.pyx":356
 *         Base directory to strip paths before applying the partitioning.
 *         """
 *         return frombytes(self.options.partition_base_dir)             # <<<<<<<<<<<<<<
 * 
 *     @partition_base_dir.setter
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 356, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->options.partition_base_dir); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 356, __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, 356, __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/_dataset.pyx":352
 * 
 *     @property
 *     def partition_base_dir(self):             # <<<<<<<<<<<<<<
 *         """
 *         Base directory to strip paths before applying the partitioning.
 */

  /* 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._dataset.FileSystemFactoryOptions.partition_base_dir.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":359
 * 
 *     @partition_base_dir.setter
 *     def partition_base_dir(self, value):             # <<<<<<<<<<<<<<
 *         self.options.partition_base_dir = tobytes(value)
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_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_dataset_24FileSystemFactoryOptions_18partition_base_dir_2__set__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  std::string __pyx_t_4;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "pyarrow/_dataset.pyx":360
 *     @partition_base_dir.setter
 *     def partition_base_dir(self, value):
 *         self.options.partition_base_dir = tobytes(value)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __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_value) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __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, 360, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_self->options.partition_base_dir = __pyx_t_4;

  /* "pyarrow/_dataset.pyx":359
 * 
 *     @partition_base_dir.setter
 *     def partition_base_dir(self, value):             # <<<<<<<<<<<<<<
 *         self.options.partition_base_dir = tobytes(value)
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.partition_base_dir.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":363
 * 
 *     @property
 *     def exclude_invalid_files(self):             # <<<<<<<<<<<<<<
 *         """Whether to exclude invalid files."""
 *         return self.options.exclude_invalid_files
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files___get__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self));

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

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

  /* "pyarrow/_dataset.pyx":365
 *     def exclude_invalid_files(self):
 *         """Whether to exclude invalid files."""
 *         return self.options.exclude_invalid_files             # <<<<<<<<<<<<<<
 * 
 *     @exclude_invalid_files.setter
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->options.exclude_invalid_files); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":363
 * 
 *     @property
 *     def exclude_invalid_files(self):             # <<<<<<<<<<<<<<
 *         """Whether to exclude invalid files."""
 *         return self.options.exclude_invalid_files
 */

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

/* "pyarrow/_dataset.pyx":368
 * 
 *     @exclude_invalid_files.setter
 *     def exclude_invalid_files(self, bint value):             # <<<<<<<<<<<<<<
 *         self.options.exclude_invalid_files = value
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
  int __pyx_v_value;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  assert(__pyx_arg_value); {
    __pyx_v_value = __Pyx_PyObject_IsTrue(__pyx_arg_value); if (unlikely((__pyx_v_value == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 368, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.exclude_invalid_files.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_2__set__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self), ((int)__pyx_v_value));

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

static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, int __pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "pyarrow/_dataset.pyx":369
 *     @exclude_invalid_files.setter
 *     def exclude_invalid_files(self, bint value):
 *         self.options.exclude_invalid_files = value             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_v_self->options.exclude_invalid_files = __pyx_v_value;

  /* "pyarrow/_dataset.pyx":368
 * 
 *     @exclude_invalid_files.setter
 *     def exclude_invalid_files(self, bint value):             # <<<<<<<<<<<<<<
 *         self.options.exclude_invalid_files = value
 * 
 */

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

/* "pyarrow/_dataset.pyx":372
 * 
 *     @property
 *     def ignore_prefixes(self):             # <<<<<<<<<<<<<<
 *         """
 *         List of prefixes. Files matching one of those prefixes will be
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes___get__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes___get__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self) {
  std::string __pyx_8genexpr2__pyx_v_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  std::vector<std::string> ::iterator __pyx_t_2;
  std::vector<std::string>  *__pyx_t_3;
  std::string __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_dataset.pyx":377
 *         ignored by the discovery process.
 *         """
 *         return [frombytes(p) for p in self.options.ignore_prefixes]             # <<<<<<<<<<<<<<
 * 
 *     @ignore_prefixes.setter
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = &__pyx_v_self->options.ignore_prefixes;
    __pyx_t_2 = __pyx_t_3->begin();
    for (;;) {
      if (!(__pyx_t_2 != __pyx_t_3->end())) break;
      __pyx_t_4 = *__pyx_t_2;
      ++__pyx_t_2;
      __pyx_8genexpr2__pyx_v_p = __pyx_t_4;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 377, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_8genexpr2__pyx_v_p); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 377, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 377, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 377, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":372
 * 
 *     @property
 *     def ignore_prefixes(self):             # <<<<<<<<<<<<<<
 *         """
 *         List of prefixes. Files matching one of those prefixes will be
 */

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

/* "pyarrow/_dataset.pyx":380
 * 
 *     @ignore_prefixes.setter
 *     def ignore_prefixes(self, values):             # <<<<<<<<<<<<<<
 *         self.options.ignore_prefixes = [tobytes(v) for v in values]
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_values); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_values) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_2__set__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self), ((PyObject *)__pyx_v_values));

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

static int __pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_2__set__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_self, PyObject *__pyx_v_values) {
  PyObject *__pyx_8genexpr3__pyx_v_v = NULL;
  int __pyx_r;
  __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;
  std::vector<std::string>  __pyx_t_8;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "pyarrow/_dataset.pyx":381
 *     @ignore_prefixes.setter
 *     def ignore_prefixes(self, values):
 *         self.options.ignore_prefixes = [tobytes(v) for v in values]             # <<<<<<<<<<<<<<
 * 
 * 
 */
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_values)) || PyTuple_CheckExact(__pyx_v_values)) {
      __pyx_t_2 = __pyx_v_values; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 381, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 381, __pyx_L5_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 381, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 381, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 381, __pyx_L5_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 381, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 381, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_v, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 381, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_8genexpr3__pyx_v_v) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_8genexpr3__pyx_v_v);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 381, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 381, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_v); __pyx_8genexpr3__pyx_v_v = 0;
    goto __pyx_L8_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_v); __pyx_8genexpr3__pyx_v_v = 0;
    goto __pyx_L1_error;
    __pyx_L8_exit_scope:;
  } /* exit inner scope */
  __pyx_t_8 = __pyx_convert_vector_from_py_std_3a__3a_string(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 381, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_self->options.ignore_prefixes = __pyx_t_8;

  /* "pyarrow/_dataset.pyx":380
 * 
 *     @ignore_prefixes.setter
 *     def ignore_prefixes(self, values):             # <<<<<<<<<<<<<<
 *         self.options.ignore_prefixes = [tobytes(v) for v in values]
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.ignore_prefixes.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_v);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_3__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_dataset_24FileSystemFactoryOptions_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__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("self.options cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")
 */
  __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("self.options cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemFactoryOptions.__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("self.options cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_5__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_dataset_24FileSystemFactoryOptions_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_24FileSystemFactoryOptions_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__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("self.options cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __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("self.options cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":394
 *         CSourceFactory* factory
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_13SourceFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":395
 * 
 *     def __init__(self):
 *         _forbid_instantiation(self.__class__)             # <<<<<<<<<<<<<<
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_forbid_instantiation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __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, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":394
 *         CSourceFactory* factory
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

/* "pyarrow/_dataset.pyx":397
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.factory = sp.get()
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_13SourceFactory_init(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::SourceFactory>  &__pyx_v_sp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":398
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.factory = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":399
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):
 *         self.wrapped = sp
 *         self.factory = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->factory = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":397
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.factory = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":402
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CSourceFactory]& sp):             # <<<<<<<<<<<<<<
 *         cdef SourceFactory self = \
 *             SourceFactory.__new__(SourceFactory)
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_13SourceFactory_wrap(std::shared_ptr<arrow::dataset::SourceFactory>  &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":404
 *     cdef wrap(shared_ptr[CSourceFactory]& sp):
 *         cdef SourceFactory self = \
 *             SourceFactory.__new__(SourceFactory)             # <<<<<<<<<<<<<<
 *         self.init(sp)
 *         return self
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_SourceFactory(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_SourceFactory), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":405
 *         cdef SourceFactory self = \
 *             SourceFactory.__new__(SourceFactory)
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":406
 *             SourceFactory.__new__(SourceFactory)
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CSourceFactory] unwrap(self) nogil:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":402
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CSourceFactory]& sp):             # <<<<<<<<<<<<<<
 *         cdef SourceFactory self = \
 *             SourceFactory.__new__(SourceFactory)
 */

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

/* "pyarrow/_dataset.pyx":408
 *         return self
 * 
 *     cdef inline shared_ptr[CSourceFactory] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr<arrow::dataset::SourceFactory>  __pyx_f_7pyarrow_8_dataset_13SourceFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::SourceFactory>  __pyx_r;

  /* "pyarrow/_dataset.pyx":409
 * 
 *     cdef inline shared_ptr[CSourceFactory] unwrap(self) nogil:
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":408
 *         return self
 * 
 *     cdef inline shared_ptr[CSourceFactory] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "pyarrow/_dataset.pyx":412
 * 
 *     @property
 *     def root_partition(self):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CExpression] expr = self.factory.root_partition()
 *         if expr.get() == nullptr:
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_14root_partition_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_14root_partition_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_13SourceFactory_14root_partition___get__(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_14root_partition___get__(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::Expression>  __pyx_v_expr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_dataset.pyx":413
 *     @property
 *     def root_partition(self):
 *         cdef shared_ptr[CExpression] expr = self.factory.root_partition()             # <<<<<<<<<<<<<<
 *         if expr.get() == nullptr:
 *             return None
 */
  __pyx_v_expr = __pyx_v_self->factory->root_partition();

  /* "pyarrow/_dataset.pyx":414
 *     def root_partition(self):
 *         cdef shared_ptr[CExpression] expr = self.factory.root_partition()
 *         if expr.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  __pyx_t_1 = ((__pyx_v_expr.get() == nullptr) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_dataset.pyx":415
 *         cdef shared_ptr[CExpression] expr = self.factory.root_partition()
 *         if expr.get() == nullptr:
 *             return None             # <<<<<<<<<<<<<<
 *         else:
 *             return Expression.wrap(expr)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pyarrow/_dataset.pyx":414
 *     def root_partition(self):
 *         cdef shared_ptr[CExpression] expr = self.factory.root_partition()
 *         if expr.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  }

  /* "pyarrow/_dataset.pyx":417
 *             return None
 *         else:
 *             return Expression.wrap(expr)             # <<<<<<<<<<<<<<
 * 
 *     @root_partition.setter
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7pyarrow_8_dataset_10Expression_wrap(__pyx_v_expr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyarrow/_dataset.pyx":412
 * 
 *     @property
 *     def root_partition(self):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CExpression] expr = self.factory.root_partition()
 *         if expr.get() == nullptr:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.SourceFactory.root_partition.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":420
 * 
 *     @root_partition.setter
 *     def root_partition(self, Expression expr):             # <<<<<<<<<<<<<<
 *         check_status(self.factory.SetRootPartition(expr.unwrap()))
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_13SourceFactory_14root_partition_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_expr); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_13SourceFactory_14root_partition_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_expr) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_expr), __pyx_ptype_7pyarrow_8_dataset_Expression, 1, "expr", 0))) __PYX_ERR(0, 420, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_13SourceFactory_14root_partition_2__set__(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_expr));

  /* 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_dataset_13SourceFactory_14root_partition_2__set__(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_expr) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "pyarrow/_dataset.pyx":421
 *     @root_partition.setter
 *     def root_partition(self, Expression expr):
 *         check_status(self.factory.SetRootPartition(expr.unwrap()))             # <<<<<<<<<<<<<<
 * 
 *     def inspect_schemas(self):
 */
  __pyx_t_1 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_self->factory->SetRootPartition(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_expr))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 421, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":420
 * 
 *     @root_partition.setter
 *     def root_partition(self, Expression expr):             # <<<<<<<<<<<<<<
 *         check_status(self.factory.SetRootPartition(expr.unwrap()))
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._dataset.SourceFactory.root_partition.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":423
 *         check_status(self.factory.SetRootPartition(expr.unwrap()))
 * 
 *     def inspect_schemas(self):             # <<<<<<<<<<<<<<
 *         cdef CResult[vector[shared_ptr[CSchema]]] result
 *         with nogil:
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_3inspect_schemas(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_3inspect_schemas(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inspect_schemas (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_13SourceFactory_2inspect_schemas(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_2inspect_schemas(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self) {
  arrow::Result<std::vector<std::shared_ptr< arrow::Schema> > >  __pyx_v_result;
  PyObject *__pyx_v_schemas = NULL;
  std::shared_ptr< arrow::Schema>  __pyx_v_s;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  std::vector<std::shared_ptr< arrow::Schema> >  __pyx_t_2;
  std::vector<std::shared_ptr< arrow::Schema> > ::iterator __pyx_t_3;
  std::vector<std::shared_ptr< arrow::Schema> >  *__pyx_t_4;
  std::shared_ptr< arrow::Schema>  __pyx_t_5;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("inspect_schemas", 0);

  /* "pyarrow/_dataset.pyx":425
 *     def inspect_schemas(self):
 *         cdef CResult[vector[shared_ptr[CSchema]]] result
 *         with nogil:             # <<<<<<<<<<<<<<
 *             result = self.factory.InspectSchemas()
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_dataset.pyx":426
 *         cdef CResult[vector[shared_ptr[CSchema]]] result
 *         with nogil:
 *             result = self.factory.InspectSchemas()             # <<<<<<<<<<<<<<
 * 
 *         schemas = []
 */
        __pyx_v_result = __pyx_v_self->factory->InspectSchemas();
      }

      /* "pyarrow/_dataset.pyx":425
 *     def inspect_schemas(self):
 *         cdef CResult[vector[shared_ptr[CSchema]]] result
 *         with nogil:             # <<<<<<<<<<<<<<
 *             result = self.factory.InspectSchemas()
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }

  /* "pyarrow/_dataset.pyx":428
 *             result = self.factory.InspectSchemas()
 * 
 *         schemas = []             # <<<<<<<<<<<<<<
 *         for s in GetResultValue(result):
 *             schemas.append(pyarrow_wrap_schema(s))
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_schemas = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":429
 * 
 *         schemas = []
 *         for s in GetResultValue(result):             # <<<<<<<<<<<<<<
 *             schemas.append(pyarrow_wrap_schema(s))
 *         return schemas
 */
  __pyx_t_2 = arrow::py::GetResultValue<std::vector<std::shared_ptr< arrow::Schema> > >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 429, __pyx_L1_error)
  __pyx_t_4 = &__pyx_t_2;
  __pyx_t_3 = __pyx_t_4->begin();
  for (;;) {
    if (!(__pyx_t_3 != __pyx_t_4->end())) break;
    __pyx_t_5 = *__pyx_t_3;
    ++__pyx_t_3;
    __pyx_v_s = __pyx_t_5;

    /* "pyarrow/_dataset.pyx":430
 *         schemas = []
 *         for s in GetResultValue(result):
 *             schemas.append(pyarrow_wrap_schema(s))             # <<<<<<<<<<<<<<
 *         return schemas
 * 
 */
    __pyx_t_1 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_schemas, __pyx_t_1); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 430, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":429
 * 
 *         schemas = []
 *         for s in GetResultValue(result):             # <<<<<<<<<<<<<<
 *             schemas.append(pyarrow_wrap_schema(s))
 *         return schemas
 */
  }

  /* "pyarrow/_dataset.pyx":431
 *         for s in GetResultValue(result):
 *             schemas.append(pyarrow_wrap_schema(s))
 *         return schemas             # <<<<<<<<<<<<<<
 * 
 *     def inspect(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_schemas);
  __pyx_r = __pyx_v_schemas;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":423
 *         check_status(self.factory.SetRootPartition(expr.unwrap()))
 * 
 *     def inspect_schemas(self):             # <<<<<<<<<<<<<<
 *         cdef CResult[vector[shared_ptr[CSchema]]] result
 *         with nogil:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.SourceFactory.inspect_schemas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_schemas);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":433
 *         return schemas
 * 
 *     def inspect(self):             # <<<<<<<<<<<<<<
 *         """
 *         Inspect all data fragments and return a common Schema.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_5inspect(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_13SourceFactory_4inspect[] = "\n        Inspect all data fragments and return a common Schema.\n\n        Returns\n        -------\n        Schema\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_5inspect(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inspect (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_13SourceFactory_4inspect(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_4inspect(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self) {
  arrow::Result<std::shared_ptr< arrow::Schema> >  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::shared_ptr< arrow::Schema>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("inspect", 0);

  /* "pyarrow/_dataset.pyx":442
 *         """
 *         cdef CResult[shared_ptr[CSchema]] result
 *         with nogil:             # <<<<<<<<<<<<<<
 *             result = self.factory.Inspect()
 *         return pyarrow_wrap_schema(GetResultValue(result))
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_dataset.pyx":443
 *         cdef CResult[shared_ptr[CSchema]] result
 *         with nogil:
 *             result = self.factory.Inspect()             # <<<<<<<<<<<<<<
 *         return pyarrow_wrap_schema(GetResultValue(result))
 * 
 */
        __pyx_v_result = __pyx_v_self->factory->Inspect();
      }

      /* "pyarrow/_dataset.pyx":442
 *         """
 *         cdef CResult[shared_ptr[CSchema]] result
 *         with nogil:             # <<<<<<<<<<<<<<
 *             result = self.factory.Inspect()
 *         return pyarrow_wrap_schema(GetResultValue(result))
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }

  /* "pyarrow/_dataset.pyx":444
 *         with nogil:
 *             result = self.factory.Inspect()
 *         return pyarrow_wrap_schema(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 *     def finish(self, Schema schema=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = arrow::py::GetResultValue<std::shared_ptr< arrow::Schema> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 444, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":433
 *         return schemas
 * 
 *     def inspect(self):             # <<<<<<<<<<<<<<
 *         """
 *         Inspect all data fragments and return a common Schema.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.SourceFactory.inspect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":446
 *         return pyarrow_wrap_schema(GetResultValue(result))
 * 
 *     def finish(self, Schema schema=None):             # <<<<<<<<<<<<<<
 *         """
 *         Create a Source using the inspected schema or an explicit schema
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_7finish(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_13SourceFactory_6finish[] = "\n        Create a Source using the inspected schema or an explicit schema\n        (if given).\n\n        Parameters\n        ----------\n        schema: Schema, default None\n            The schema to conform the source to.  If None, the inspected\n            schema is used.\n\n        Returns\n        -------\n        Source\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_7finish(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("finish (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct __pyx_obj_7pyarrow_3lib_Schema *)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_schema);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finish") < 0)) __PYX_ERR(0, 446, __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_schema = ((struct __pyx_obj_7pyarrow_3lib_Schema *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("finish", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 446, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.SourceFactory.finish", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_7pyarrow_3lib_Schema, 1, "schema", 0))) __PYX_ERR(0, 446, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_13SourceFactory_6finish(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self), __pyx_v_schema);

  /* 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_dataset_13SourceFactory_6finish(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema) {
  std::shared_ptr< arrow::Schema>  __pyx_v_sp_schema;
  arrow::Result<std::shared_ptr<arrow::dataset::Source> >  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  std::shared_ptr<arrow::dataset::Source>  __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("finish", 0);

  /* "pyarrow/_dataset.pyx":464
 *             shared_ptr[CSchema] sp_schema
 *             CResult[shared_ptr[CSource]] result
 *         if schema is not None:             # <<<<<<<<<<<<<<
 *             sp_schema = pyarrow_unwrap_schema(schema)
 *             with nogil:
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_schema) != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_dataset.pyx":465
 *             CResult[shared_ptr[CSource]] result
 *         if schema is not None:
 *             sp_schema = pyarrow_unwrap_schema(schema)             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 result = self.factory.Finish(sp_schema)
 */
    __pyx_v_sp_schema = __pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(((PyObject *)__pyx_v_schema));

    /* "pyarrow/_dataset.pyx":466
 *         if schema is not None:
 *             sp_schema = pyarrow_unwrap_schema(schema)
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 result = self.factory.Finish(sp_schema)
 *         else:
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_dataset.pyx":467
 *             sp_schema = pyarrow_unwrap_schema(schema)
 *             with nogil:
 *                 result = self.factory.Finish(sp_schema)             # <<<<<<<<<<<<<<
 *         else:
 *             with nogil:
 */
          __pyx_v_result = __pyx_v_self->factory->Finish(__pyx_v_sp_schema);
        }

        /* "pyarrow/_dataset.pyx":466
 *         if schema is not None:
 *             sp_schema = pyarrow_unwrap_schema(schema)
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 result = self.factory.Finish(sp_schema)
 *         else:
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L6;
          }
          __pyx_L6:;
        }
    }

    /* "pyarrow/_dataset.pyx":464
 *             shared_ptr[CSchema] sp_schema
 *             CResult[shared_ptr[CSource]] result
 *         if schema is not None:             # <<<<<<<<<<<<<<
 *             sp_schema = pyarrow_unwrap_schema(schema)
 *             with nogil:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":469
 *                 result = self.factory.Finish(sp_schema)
 *         else:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 result = self.factory.Finish()
 *         return Source.wrap(GetResultValue(result))
 */
  /*else*/ {
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_dataset.pyx":470
 *         else:
 *             with nogil:
 *                 result = self.factory.Finish()             # <<<<<<<<<<<<<<
 *         return Source.wrap(GetResultValue(result))
 * 
 */
          __pyx_v_result = __pyx_v_self->factory->Finish();
        }

        /* "pyarrow/_dataset.pyx":469
 *                 result = self.factory.Finish(sp_schema)
 *         else:
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 result = self.factory.Finish()
 *         return Source.wrap(GetResultValue(result))
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L9;
          }
          __pyx_L9:;
        }
    }
  }
  __pyx_L3:;

  /* "pyarrow/_dataset.pyx":471
 *             with nogil:
 *                 result = self.factory.Finish()
 *         return Source.wrap(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::Source> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 471, __pyx_L1_error)
  __pyx_t_4 = __pyx_f_7pyarrow_8_dataset_6Source_wrap(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":446
 *         return pyarrow_wrap_schema(GetResultValue(result))
 * 
 *     def finish(self, Schema schema=None):             # <<<<<<<<<<<<<<
 *         """
 *         Create a Source using the inspected schema or an explicit schema
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyarrow._dataset.SourceFactory.finish", __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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_9__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_dataset_13SourceFactory_8__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__16, 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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.SourceFactory.__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13SourceFactory_11__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_dataset_13SourceFactory_10__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13SourceFactory_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, 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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":493
 *         CFileSystemSourceFactory* filesystem_factory
 * 
 *     def __init__(self, FileSystem filesystem not None, paths_or_selector,             # <<<<<<<<<<<<<<
 *                  FileFormat format not None,
 *                  FileSystemFactoryOptions options=None):
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3_fs_FileSystem *__pyx_v_filesystem = 0;
  PyObject *__pyx_v_paths_or_selector = 0;
  struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_format = 0;
  struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_options = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_filesystem,&__pyx_n_s_paths_or_selector,&__pyx_n_s_format,&__pyx_n_s_options,0};
    PyObject* values[4] = {0,0,0,0};

    /* "pyarrow/_dataset.pyx":495
 *     def __init__(self, FileSystem filesystem not None, paths_or_selector,
 *                  FileFormat format not None,
 *                  FileSystemFactoryOptions options=None):             # <<<<<<<<<<<<<<
 *         cdef:
 *             vector[c_string] paths
 */
    values[3] = (PyObject *)((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_filesystem)) != 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_paths_or_selector)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 1); __PYX_ERR(0, 493, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 2); __PYX_ERR(0, 493, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_options);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 493, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_filesystem = ((struct __pyx_obj_7pyarrow_3_fs_FileSystem *)values[0]);
    __pyx_v_paths_or_selector = values[1];
    __pyx_v_format = ((struct __pyx_obj_7pyarrow_8_dataset_FileFormat *)values[2]);
    __pyx_v_options = ((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 493, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemSourceFactory.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filesystem), __pyx_ptype_7pyarrow_3_fs_FileSystem, 0, "filesystem", 0))) __PYX_ERR(0, 493, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_format), __pyx_ptype_7pyarrow_8_dataset_FileFormat, 0, "format", 0))) __PYX_ERR(0, 494, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_options), __pyx_ptype_7pyarrow_8_dataset_FileSystemFactoryOptions, 1, "options", 0))) __PYX_ERR(0, 495, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_23FileSystemSourceFactory___init__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *)__pyx_v_self), __pyx_v_filesystem, __pyx_v_paths_or_selector, __pyx_v_format, __pyx_v_options);

  /* "pyarrow/_dataset.pyx":493
 *         CFileSystemSourceFactory* filesystem_factory
 * 
 *     def __init__(self, FileSystem filesystem not None, paths_or_selector,             # <<<<<<<<<<<<<<
 *                  FileFormat format not None,
 *                  FileSystemFactoryOptions options=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_dataset_23FileSystemSourceFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_3_fs_FileSystem *__pyx_v_filesystem, PyObject *__pyx_v_paths_or_selector, struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_format, struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *__pyx_v_options) {
  std::vector<std::string>  __pyx_v_paths;
  arrow::fs::FileSelector __pyx_v_selector;
  arrow::Result<std::shared_ptr<arrow::dataset::SourceFactory> >  __pyx_v_result;
  std::shared_ptr<arrow::fs::FileSystem>  __pyx_v_c_filesystem;
  std::shared_ptr<arrow::dataset::FileFormat>  __pyx_v_c_format;
  arrow::dataset::FileSystemFactoryOptions __pyx_v_c_options;
  PyObject *__pyx_8genexpr4__pyx_v_s = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  arrow::fs::FileSelector __pyx_t_5;
  int __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  PyObject *(*__pyx_t_8)(PyObject *);
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  std::vector<std::string>  __pyx_t_12;
  std::shared_ptr<arrow::dataset::SourceFactory>  __pyx_t_13;
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_options);

  /* "pyarrow/_dataset.pyx":504
 *             CFileSystemFactoryOptions c_options
 * 
 *         c_filesystem = filesystem.unwrap()             # <<<<<<<<<<<<<<
 *         c_format = format.unwrap()
 * 
 */
  __pyx_v_c_filesystem = ((struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem *)__pyx_v_filesystem->__pyx_vtab)->unwrap(__pyx_v_filesystem);

  /* "pyarrow/_dataset.pyx":505
 * 
 *         c_filesystem = filesystem.unwrap()
 *         c_format = format.unwrap()             # <<<<<<<<<<<<<<
 * 
 *         options = options or FileSystemFactoryOptions()
 */
  __pyx_v_c_format = __pyx_f_7pyarrow_8_dataset_10FileFormat_unwrap(__pyx_v_format);

  /* "pyarrow/_dataset.pyx":507
 *         c_format = format.unwrap()
 * 
 *         options = options or FileSystemFactoryOptions()             # <<<<<<<<<<<<<<
 *         c_options = options.unwrap()
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_options)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 507, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __Pyx_INCREF(((PyObject *)__pyx_v_options));
    __pyx_t_1 = ((PyObject *)__pyx_v_options);
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_FileSystemFactoryOptions)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_L3_bool_binop_done:;
  __Pyx_DECREF_SET(__pyx_v_options, ((struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":508
 * 
 *         options = options or FileSystemFactoryOptions()
 *         c_options = options.unwrap()             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(paths_or_selector, FileSelector):
 */
  __pyx_v_c_options = __pyx_f_7pyarrow_8_dataset_24FileSystemFactoryOptions_unwrap(__pyx_v_options);

  /* "pyarrow/_dataset.pyx":510
 *         c_options = options.unwrap()
 * 
 *         if isinstance(paths_or_selector, FileSelector):             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 selector = (<FileSelector>paths_or_selector).selector
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_paths_or_selector, __pyx_ptype_7pyarrow_3_fs_FileSelector); 
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {

    /* "pyarrow/_dataset.pyx":511
 * 
 *         if isinstance(paths_or_selector, FileSelector):
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 selector = (<FileSelector>paths_or_selector).selector
 *                 result = CFileSystemSourceFactory.MakeFromSelector(
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_dataset.pyx":512
 *         if isinstance(paths_or_selector, FileSelector):
 *             with nogil:
 *                 selector = (<FileSelector>paths_or_selector).selector             # <<<<<<<<<<<<<<
 *                 result = CFileSystemSourceFactory.MakeFromSelector(
 *                     c_filesystem,
 */
          __pyx_t_5 = ((struct __pyx_obj_7pyarrow_3_fs_FileSelector *)__pyx_v_paths_or_selector)->selector;
          __pyx_v_selector = __pyx_t_5;

          /* "pyarrow/_dataset.pyx":513
 *             with nogil:
 *                 selector = (<FileSelector>paths_or_selector).selector
 *                 result = CFileSystemSourceFactory.MakeFromSelector(             # <<<<<<<<<<<<<<
 *                     c_filesystem,
 *                     selector,
 */
          __pyx_v_result = arrow::dataset::FileSystemSourceFactory::Make(__pyx_v_c_filesystem, __pyx_v_selector, __pyx_v_c_format, __pyx_v_c_options);
        }

        /* "pyarrow/_dataset.pyx":511
 * 
 *         if isinstance(paths_or_selector, FileSelector):
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 selector = (<FileSelector>paths_or_selector).selector
 *                 result = CFileSystemSourceFactory.MakeFromSelector(
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L8;
          }
          __pyx_L8:;
        }
    }

    /* "pyarrow/_dataset.pyx":510
 *         c_options = options.unwrap()
 * 
 *         if isinstance(paths_or_selector, FileSelector):             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 selector = (<FileSelector>paths_or_selector).selector
 */
    goto __pyx_L5;
  }

  /* "pyarrow/_dataset.pyx":519
 *                     c_options
 *                 )
 *         elif isinstance(paths_or_selector, (list, tuple)):             # <<<<<<<<<<<<<<
 *             paths = [tobytes(s) for s in paths_or_selector]
 *             with nogil:
 */
  __pyx_t_2 = PyList_Check(__pyx_v_paths_or_selector); 
  __pyx_t_6 = (__pyx_t_2 != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_4 = __pyx_t_6;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_6 = PyTuple_Check(__pyx_v_paths_or_selector); 
  __pyx_t_2 = (__pyx_t_6 != 0);
  __pyx_t_4 = __pyx_t_2;
  __pyx_L9_bool_binop_done:;
  __pyx_t_2 = (__pyx_t_4 != 0);
  if (likely(__pyx_t_2)) {

    /* "pyarrow/_dataset.pyx":520
 *                 )
 *         elif isinstance(paths_or_selector, (list, tuple)):
 *             paths = [tobytes(s) for s in paths_or_selector]             # <<<<<<<<<<<<<<
 *             with nogil:
 *                 result = CFileSystemSourceFactory.MakeFromPaths(
 */
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (likely(PyList_CheckExact(__pyx_v_paths_or_selector)) || PyTuple_CheckExact(__pyx_v_paths_or_selector)) {
        __pyx_t_3 = __pyx_v_paths_or_selector; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
        __pyx_t_8 = NULL;
      } else {
        __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_paths_or_selector); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 520, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 520, __pyx_L13_error)
      }
      for (;;) {
        if (likely(!__pyx_t_8)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 520, __pyx_L13_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 520, __pyx_L13_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          } else {
            if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 520, __pyx_L13_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 520, __pyx_L13_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          }
        } else {
          __pyx_t_9 = __pyx_t_8(__pyx_t_3);
          if (unlikely(!__pyx_t_9)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 520, __pyx_L13_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_XDECREF_SET(__pyx_8genexpr4__pyx_v_s, __pyx_t_9);
        __pyx_t_9 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 520, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_9 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_8genexpr4__pyx_v_s) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_8genexpr4__pyx_v_s);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 520, __pyx_L13_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 520, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s); __pyx_8genexpr4__pyx_v_s = 0;
      goto __pyx_L16_exit_scope;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s); __pyx_8genexpr4__pyx_v_s = 0;
      goto __pyx_L1_error;
      __pyx_L16_exit_scope:;
    } /* exit inner scope */
    __pyx_t_12 = __pyx_convert_vector_from_py_std_3a__3a_string(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 520, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_paths = __pyx_t_12;

    /* "pyarrow/_dataset.pyx":521
 *         elif isinstance(paths_or_selector, (list, tuple)):
 *             paths = [tobytes(s) for s in paths_or_selector]
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 result = CFileSystemSourceFactory.MakeFromPaths(
 *                     c_filesystem,
 */
    {
        #ifdef WITH_THREAD
        PyThreadState *_save;
        Py_UNBLOCK_THREADS
        __Pyx_FastGIL_Remember();
        #endif
        /*try:*/ {

          /* "pyarrow/_dataset.pyx":522
 *             paths = [tobytes(s) for s in paths_or_selector]
 *             with nogil:
 *                 result = CFileSystemSourceFactory.MakeFromPaths(             # <<<<<<<<<<<<<<
 *                     c_filesystem,
 *                     paths,
 */
          __pyx_v_result = arrow::dataset::FileSystemSourceFactory::Make(__pyx_v_c_filesystem, __pyx_v_paths, __pyx_v_c_format, __pyx_v_c_options);
        }

        /* "pyarrow/_dataset.pyx":521
 *         elif isinstance(paths_or_selector, (list, tuple)):
 *             paths = [tobytes(s) for s in paths_or_selector]
 *             with nogil:             # <<<<<<<<<<<<<<
 *                 result = CFileSystemSourceFactory.MakeFromPaths(
 *                     c_filesystem,
 */
        /*finally:*/ {
          /*normal exit:*/{
            #ifdef WITH_THREAD
            __Pyx_FastGIL_Forget();
            Py_BLOCK_THREADS
            #endif
            goto __pyx_L19;
          }
          __pyx_L19:;
        }
    }

    /* "pyarrow/_dataset.pyx":519
 *                     c_options
 *                 )
 *         elif isinstance(paths_or_selector, (list, tuple)):             # <<<<<<<<<<<<<<
 *             paths = [tobytes(s) for s in paths_or_selector]
 *             with nogil:
 */
    goto __pyx_L5;
  }

  /* "pyarrow/_dataset.pyx":529
 *                 )
 *         else:
 *             raise TypeError('Must pass either paths or a FileSelector')             # <<<<<<<<<<<<<<
 * 
 *         self.init(GetResultValue(result))
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 529, __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, 529, __pyx_L1_error)
  }
  __pyx_L5:;

  /* "pyarrow/_dataset.pyx":531
 *             raise TypeError('Must pass either paths or a FileSelector')
 * 
 *         self.init(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):
 */
  __pyx_t_13 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::SourceFactory> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 531, __pyx_L1_error)
  __pyx_t_1 = ((struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemSourceFactory *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self), __pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":493
 *         CFileSystemSourceFactory* filesystem_factory
 * 
 *     def __init__(self, FileSystem filesystem not None, paths_or_selector,             # <<<<<<<<<<<<<<
 *                  FileFormat format not None,
 *                  FileSystemFactoryOptions options=None):
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemSourceFactory.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_s);
  __Pyx_XDECREF((PyObject *)__pyx_v_options);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":533
 *         self.init(GetResultValue(result))
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):             # <<<<<<<<<<<<<<
 *         SourceFactory.init(self, sp)
 *         self.filesystem_factory = <CFileSystemSourceFactory*> sp.get()
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_23FileSystemSourceFactory_init(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::SourceFactory>  &__pyx_v_sp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":534
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):
 *         SourceFactory.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.filesystem_factory = <CFileSystemSourceFactory*> sp.get()
 * 
 */
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_13SourceFactory_init(((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_v_self), __pyx_v_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":535
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):
 *         SourceFactory.init(self, sp)
 *         self.filesystem_factory = <CFileSystemSourceFactory*> sp.get()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->filesystem_factory = ((arrow::dataset::FileSystemSourceFactory *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":533
 *         self.init(GetResultValue(result))
 * 
 *     cdef init(self, shared_ptr[CSourceFactory]& sp):             # <<<<<<<<<<<<<<
 *         SourceFactory.init(self, sp)
 *         self.filesystem_factory = <CFileSystemSourceFactory*> sp.get()
 */

  /* 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._dataset.FileSystemSourceFactory.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_3__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_dataset_23FileSystemSourceFactory_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_23FileSystemSourceFactory_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__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("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, 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("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemSourceFactory.__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("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_5__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_dataset_23FileSystemSourceFactory_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_23FileSystemSourceFactory_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *__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("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, 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("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":545
 *         CSource* source
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_6Source___init__(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":546
 * 
 *     def __init__(self):
 *         _forbid_instantiation(self.__class__)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_forbid_instantiation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 546, __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, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":545
 *         CSource* source
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

/* "pyarrow/_dataset.pyx":548
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.source = sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_6Source_init(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self, std::shared_ptr<arrow::dataset::Source>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":549
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.source = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":550
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 *         self.wrapped = sp
 *         self.source = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->source = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":548
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.source = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":553
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         cdef Source self
 * 
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_6Source_wrap(std::shared_ptr<arrow::dataset::Source>  &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self = 0;
  PyObject *__pyx_v_typ = 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;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":556
 *         cdef Source self
 * 
 *         typ = frombytes(sp.get().type_name())             # <<<<<<<<<<<<<<
 *         if typ == 'tree':
 *             self = TreeSource.__new__(TreeSource)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_sp.get()->type_name()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 556, __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, 556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_typ = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":557
 * 
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'tree':             # <<<<<<<<<<<<<<
 *             self = TreeSource.__new__(TreeSource)
 *         elif typ == 'filesystem':
 */
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_typ, __pyx_n_u_tree, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 557, __pyx_L1_error)
  if (__pyx_t_5) {

    /* "pyarrow/_dataset.pyx":558
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'tree':
 *             self = TreeSource.__new__(TreeSource)             # <<<<<<<<<<<<<<
 *         elif typ == 'filesystem':
 *             self = FileSystemSource.__new__(FileSystemSource)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_TreeSource(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_TreeSource), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 558, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Source)))) __PYX_ERR(0, 558, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":557
 * 
 *         typ = frombytes(sp.get().type_name())
 *         if typ == 'tree':             # <<<<<<<<<<<<<<
 *             self = TreeSource.__new__(TreeSource)
 *         elif typ == 'filesystem':
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":559
 *         if typ == 'tree':
 *             self = TreeSource.__new__(TreeSource)
 *         elif typ == 'filesystem':             # <<<<<<<<<<<<<<
 *             self = FileSystemSource.__new__(FileSystemSource)
 *         else:
 */
  __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_v_typ, __pyx_n_u_filesystem, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 559, __pyx_L1_error)
  if (likely(__pyx_t_5)) {

    /* "pyarrow/_dataset.pyx":560
 *             self = TreeSource.__new__(TreeSource)
 *         elif typ == 'filesystem':
 *             self = FileSystemSource.__new__(FileSystemSource)             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError(typ)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_FileSystemSource(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_FileSystemSource), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Source)))) __PYX_ERR(0, 560, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":559
 *         if typ == 'tree':
 *             self = TreeSource.__new__(TreeSource)
 *         elif typ == 'filesystem':             # <<<<<<<<<<<<<<
 *             self = FileSystemSource.__new__(FileSystemSource)
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":562
 *             self = FileSystemSource.__new__(FileSystemSource)
 *         else:
 *             raise TypeError(typ)             # <<<<<<<<<<<<<<
 * 
 *         self.init(sp)
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_v_typ); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 562, __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, 562, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "pyarrow/_dataset.pyx":564
 *             raise TypeError(typ)
 * 
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_Source *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":565
 * 
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef shared_ptr[CSource] unwrap(self) nogil:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":553
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         cdef Source self
 * 
 */

  /* 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._dataset.Source.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_self);
  __Pyx_XDECREF(__pyx_v_typ);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":567
 *         return self
 * 
 *     cdef shared_ptr[CSource] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static std::shared_ptr<arrow::dataset::Source>  __pyx_f_7pyarrow_8_dataset_6Source_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::Source>  __pyx_r;

  /* "pyarrow/_dataset.pyx":568
 * 
 *     cdef shared_ptr[CSource] unwrap(self) nogil:
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":567
 *         return self
 * 
 *     cdef shared_ptr[CSource] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "pyarrow/_dataset.pyx":571
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         """
 *         Schema of all RecordBatches contained in this DataSource.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_6schema_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_6schema_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_6Source_6schema___get__(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self));

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

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

  /* "pyarrow/_dataset.pyx":575
 *         Schema of all RecordBatches contained in this DataSource.
 *         """
 *         return pyarrow_wrap_schema(self.source.schema())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_v_self->source->schema()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":571
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         """
 *         Schema of all RecordBatches contained in this DataSource.
 */

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

/* "pyarrow/_dataset.pyx":578
 * 
 *     @property
 *     def partition_expression(self):             # <<<<<<<<<<<<<<
 *         """
 *         An Expression which evaluates to true for all data viewed by this
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_20partition_expression_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_20partition_expression_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_6Source_20partition_expression___get__(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_6Source_20partition_expression___get__(struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::Expression>  __pyx_v_expr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_dataset.pyx":584
 *         """
 *         cdef shared_ptr[CExpression] expr
 *         expr = self.source.partition_expression()             # <<<<<<<<<<<<<<
 *         if expr.get() == nullptr:
 *             return None
 */
  __pyx_v_expr = __pyx_v_self->source->partition_expression();

  /* "pyarrow/_dataset.pyx":585
 *         cdef shared_ptr[CExpression] expr
 *         expr = self.source.partition_expression()
 *         if expr.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  __pyx_t_1 = ((__pyx_v_expr.get() == nullptr) != 0);
  if (__pyx_t_1) {

    /* "pyarrow/_dataset.pyx":586
 *         expr = self.source.partition_expression()
 *         if expr.get() == nullptr:
 *             return None             # <<<<<<<<<<<<<<
 *         else:
 *             return Expression.wrap(expr)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pyarrow/_dataset.pyx":585
 *         cdef shared_ptr[CExpression] expr
 *         expr = self.source.partition_expression()
 *         if expr.get() == nullptr:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  }

  /* "pyarrow/_dataset.pyx":588
 *             return None
 *         else:
 *             return Expression.wrap(expr)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_7pyarrow_8_dataset_10Expression_wrap(__pyx_v_expr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "pyarrow/_dataset.pyx":578
 * 
 *     @property
 *     def partition_expression(self):             # <<<<<<<<<<<<<<
 *         """
 *         An Expression which evaluates to true for all data viewed by this
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.Source.partition_expression.__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("self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_3__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_dataset_6Source_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_6Source_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Source *__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("self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__21, 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("self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Source.__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("self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_6Source_5__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_dataset_6Source_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_6Source_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Source *__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("self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__22, 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("self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":597
 *         CTreeSource* tree_source
 * 
 *     def __init__(self, schema, sources):             # <<<<<<<<<<<<<<
 *         cdef:
 *             Source child
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_10TreeSource_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_10TreeSource_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_schema = 0;
  PyObject *__pyx_v_sources = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema,&__pyx_n_s_sources,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_sources)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 597, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 597, __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 = values[0];
    __pyx_v_sources = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 597, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.TreeSource.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10TreeSource___init__(((struct __pyx_obj_7pyarrow_8_dataset_TreeSource *)__pyx_v_self), __pyx_v_schema, __pyx_v_sources);

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

static int __pyx_pf_7pyarrow_8_dataset_10TreeSource___init__(struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__pyx_v_self, PyObject *__pyx_v_schema, PyObject *__pyx_v_sources) {
  struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_child = 0;
  arrow::dataset::SourceVector __pyx_v_children;
  std::shared_ptr<arrow::dataset::TreeSource>  __pyx_v_tree_source;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  std::shared_ptr<arrow::dataset::TreeSource>  __pyx_t_5;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":603
 *             shared_ptr[CTreeSource] tree_source
 * 
 *         for child in sources:             # <<<<<<<<<<<<<<
 *             children.push_back(child.wrapped)
 * 
 */
  if (likely(PyList_CheckExact(__pyx_v_sources)) || PyTuple_CheckExact(__pyx_v_sources)) {
    __pyx_t_1 = __pyx_v_sources; __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_sources); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 603, __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, 603, __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, 603, __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, 603, __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, 603, __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, 603, __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, 603, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_7pyarrow_8_dataset_Source))))) __PYX_ERR(0, 603, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_child, ((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "pyarrow/_dataset.pyx":604
 * 
 *         for child in sources:
 *             children.push_back(child.wrapped)             # <<<<<<<<<<<<<<
 * 
 *         tree_source = make_shared[CTreeSource](
 */
    try {
      __pyx_v_children.push_back(__pyx_v_child->wrapped);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 604, __pyx_L1_error)
    }

    /* "pyarrow/_dataset.pyx":603
 *             shared_ptr[CTreeSource] tree_source
 * 
 *         for child in sources:             # <<<<<<<<<<<<<<
 *             children.push_back(child.wrapped)
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":606
 *             children.push_back(child.wrapped)
 * 
 *         tree_source = make_shared[CTreeSource](             # <<<<<<<<<<<<<<
 *             pyarrow_unwrap_schema(schema), children)
 *         self.init(<shared_ptr[CSource]> tree_source)
 */
  try {
    __pyx_t_5 = std::make_shared<arrow::dataset::TreeSource>(__pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(__pyx_v_schema), __pyx_v_children);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 606, __pyx_L1_error)
  }
  __pyx_v_tree_source = __pyx_t_5;

  /* "pyarrow/_dataset.pyx":608
 *         tree_source = make_shared[CTreeSource](
 *             pyarrow_unwrap_schema(schema), children)
 *         self.init(<shared_ptr[CSource]> tree_source)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_TreeSource *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self), ((std::shared_ptr<arrow::dataset::Source> )__pyx_v_tree_source));

  /* "pyarrow/_dataset.pyx":597
 *         CTreeSource* tree_source
 * 
 *     def __init__(self, schema, sources):             # <<<<<<<<<<<<<<
 *         cdef:
 *             Source child
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyarrow._dataset.TreeSource.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_child);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":610
 *         self.init(<shared_ptr[CSource]> tree_source)
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         Source.init(self, sp)
 *         self.tree_source = <CTreeSource*> sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_10TreeSource_init(struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__pyx_v_self, std::shared_ptr<arrow::dataset::Source>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":611
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 *         Source.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.tree_source = <CTreeSource*> sp.get()
 * 
 */
  __pyx_f_7pyarrow_8_dataset_6Source_init(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self), __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":612
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 *         Source.init(self, sp)
 *         self.tree_source = <CTreeSource*> sp.get()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->tree_source = ((arrow::dataset::TreeSource *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":610
 *         self.init(<shared_ptr[CSource]> tree_source)
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         Source.init(self, sp)
 *         self.tree_source = <CTreeSource*> sp.get()
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10TreeSource_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10TreeSource_3__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_dataset_10TreeSource_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_TreeSource *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10TreeSource_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__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("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__23, 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("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.TreeSource.__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("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10TreeSource_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10TreeSource_5__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_dataset_10TreeSource_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_TreeSource *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10TreeSource_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_TreeSource *__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("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__24, 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("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":621
 *         CFileSystemSource* filesystem_source
 * 
 *     def __init__(self, Schema schema not None, Expression root_partition,             # <<<<<<<<<<<<<<
 *                  FileFormat file_format not None,
 *                  FileSystem filesystem not None,
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_16FileSystemSource_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_16FileSystemSource___init__[] = "Create a FileSystemSource\n\n        Parameters\n        ----------\n        schema : Schema\n            The top-level schema of the DataSource.\n        root_partition : Expression\n            The top-level partition of the DataSource.\n        file_format : FileFormat\n            File format to create fragments from, currently only\n            ParquetFileFormat is supported.\n        filesystem : FileSystem\n            The filesystem which files are from.\n        paths_or_selector : Union[FileSelector, List[FileStats]]\n            List of files/directories to consume.\n        partitions : List[Expression]\n            Attach aditional partition information for the file paths.\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyarrow_8_dataset_16FileSystemSource___init__;
#endif
static int __pyx_pw_7pyarrow_8_dataset_16FileSystemSource_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema = 0;
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_root_partition = 0;
  struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_file_format = 0;
  struct __pyx_obj_7pyarrow_3_fs_FileSystem *__pyx_v_filesystem = 0;
  PyObject *__pyx_v_paths_or_selector = 0;
  PyObject *__pyx_v_partitions = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema,&__pyx_n_s_root_partition,&__pyx_n_s_file_format,&__pyx_n_s_filesystem,&__pyx_n_s_paths_or_selector,&__pyx_n_s_partitions,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  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_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_root_partition)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 1); __PYX_ERR(0, 621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_file_format)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 2); __PYX_ERR(0, 621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_filesystem)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 3); __PYX_ERR(0, 621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_paths_or_selector)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 4); __PYX_ERR(0, 621, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_partitions)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, 5); __PYX_ERR(0, 621, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 621, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_schema = ((struct __pyx_obj_7pyarrow_3lib_Schema *)values[0]);
    __pyx_v_root_partition = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[1]);
    __pyx_v_file_format = ((struct __pyx_obj_7pyarrow_8_dataset_FileFormat *)values[2]);
    __pyx_v_filesystem = ((struct __pyx_obj_7pyarrow_3_fs_FileSystem *)values[3]);
    __pyx_v_paths_or_selector = values[4];
    __pyx_v_partitions = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 621, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemSource.__init__", __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, 0, "schema", 0))) __PYX_ERR(0, 621, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_root_partition), __pyx_ptype_7pyarrow_8_dataset_Expression, 1, "root_partition", 0))) __PYX_ERR(0, 621, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_file_format), __pyx_ptype_7pyarrow_8_dataset_FileFormat, 0, "file_format", 0))) __PYX_ERR(0, 622, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filesystem), __pyx_ptype_7pyarrow_3_fs_FileSystem, 0, "filesystem", 0))) __PYX_ERR(0, 623, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_16FileSystemSource___init__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *)__pyx_v_self), __pyx_v_schema, __pyx_v_root_partition, __pyx_v_file_format, __pyx_v_filesystem, __pyx_v_paths_or_selector, __pyx_v_partitions);

  /* 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_dataset_16FileSystemSource___init__(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_root_partition, struct __pyx_obj_7pyarrow_8_dataset_FileFormat *__pyx_v_file_format, struct __pyx_obj_7pyarrow_3_fs_FileSystem *__pyx_v_filesystem, PyObject *__pyx_v_paths_or_selector, PyObject *__pyx_v_partitions) {
  struct __pyx_obj_7pyarrow_3_fs_FileStats *__pyx_v_stats = 0;
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_expr = 0;
  std::vector<arrow::fs::FileStats>  __pyx_v_c_file_stats;
  std::vector<std::shared_ptr<arrow::dataset::Expression> >  __pyx_v_c_partitions;
  arrow::Result<std::shared_ptr<arrow::dataset::Source> >  __pyx_v_result;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  int __pyx_t_6;
  int __pyx_t_7;
  std::shared_ptr<arrow::dataset::Source>  __pyx_t_8;
  __Pyx_RefNannySetupContext("__init__", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_root_partition);

  /* "pyarrow/_dataset.pyx":650
 *             CResult[shared_ptr[CSource]] result
 * 
 *         for stats in filesystem.get_target_stats(paths_or_selector):             # <<<<<<<<<<<<<<
 *             c_file_stats.push_back(stats.unwrap())
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_filesystem), __pyx_n_s_get_target_stats); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_paths_or_selector) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_paths_or_selector);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 650, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 650, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 650, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_5(__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, 650, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_7pyarrow_3_fs_FileStats))))) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_stats, ((struct __pyx_obj_7pyarrow_3_fs_FileStats *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":651
 * 
 *         for stats in filesystem.get_target_stats(paths_or_selector):
 *             c_file_stats.push_back(stats.unwrap())             # <<<<<<<<<<<<<<
 * 
 *         for expr in partitions:
 */
    try {
      __pyx_v_c_file_stats.push_back(((struct __pyx_vtabstruct_7pyarrow_3_fs_FileStats *)__pyx_v_stats->__pyx_vtab)->unwrap(__pyx_v_stats));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 651, __pyx_L1_error)
    }

    /* "pyarrow/_dataset.pyx":650
 *             CResult[shared_ptr[CSource]] result
 * 
 *         for stats in filesystem.get_target_stats(paths_or_selector):             # <<<<<<<<<<<<<<
 *             c_file_stats.push_back(stats.unwrap())
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":653
 *             c_file_stats.push_back(stats.unwrap())
 * 
 *         for expr in partitions:             # <<<<<<<<<<<<<<
 *             c_partitions.push_back(expr.unwrap())
 * 
 */
  if (likely(PyList_CheckExact(__pyx_v_partitions)) || PyTuple_CheckExact(__pyx_v_partitions)) {
    __pyx_t_2 = __pyx_v_partitions; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_partitions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 653, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 653, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 653, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 653, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 653, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 653, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_5(__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, 653, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_7pyarrow_8_dataset_Expression))))) __PYX_ERR(0, 653, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_expr, ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":654
 * 
 *         for expr in partitions:
 *             c_partitions.push_back(expr.unwrap())             # <<<<<<<<<<<<<<
 * 
 *         if c_file_stats.size() != c_partitions.size():
 */
    try {
      __pyx_v_c_partitions.push_back(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_expr));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 654, __pyx_L1_error)
    }

    /* "pyarrow/_dataset.pyx":653
 *             c_file_stats.push_back(stats.unwrap())
 * 
 *         for expr in partitions:             # <<<<<<<<<<<<<<
 *             c_partitions.push_back(expr.unwrap())
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":656
 *             c_partitions.push_back(expr.unwrap())
 * 
 *         if c_file_stats.size() != c_partitions.size():             # <<<<<<<<<<<<<<
 *             raise ValueError(
 *                 'The number of files resulting from paths_or_selector must be '
 */
  __pyx_t_6 = ((__pyx_v_c_file_stats.size() != __pyx_v_c_partitions.size()) != 0);
  if (unlikely(__pyx_t_6)) {

    /* "pyarrow/_dataset.pyx":657
 * 
 *         if c_file_stats.size() != c_partitions.size():
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 'The number of files resulting from paths_or_selector must be '
 *                 'equal to the number of partitions.'
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 657, __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, 657, __pyx_L1_error)

    /* "pyarrow/_dataset.pyx":656
 *             c_partitions.push_back(expr.unwrap())
 * 
 *         if c_file_stats.size() != c_partitions.size():             # <<<<<<<<<<<<<<
 *             raise ValueError(
 *                 'The number of files resulting from paths_or_selector must be '
 */
  }

  /* "pyarrow/_dataset.pyx":662
 *             )
 * 
 *         if root_partition is None:             # <<<<<<<<<<<<<<
 *             root_partition = ScalarExpression(True)
 * 
 */
  __pyx_t_6 = (((PyObject *)__pyx_v_root_partition) == Py_None);
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {

    /* "pyarrow/_dataset.pyx":663
 * 
 *         if root_partition is None:
 *             root_partition = ScalarExpression(True)             # <<<<<<<<<<<<<<
 * 
 *         result = CFileSystemSource.Make(
 */
    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_ScalarExpression), __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 663, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_root_partition, ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "pyarrow/_dataset.pyx":662
 *             )
 * 
 *         if root_partition is None:             # <<<<<<<<<<<<<<
 *             root_partition = ScalarExpression(True)
 * 
 */
  }

  /* "pyarrow/_dataset.pyx":665
 *             root_partition = ScalarExpression(True)
 * 
 *         result = CFileSystemSource.Make(             # <<<<<<<<<<<<<<
 *             pyarrow_unwrap_schema(schema),
 *             root_partition.unwrap(),
 */
  __pyx_v_result = arrow::dataset::FileSystemSource::Make(__pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(((PyObject *)__pyx_v_schema)), __pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_root_partition), __pyx_f_7pyarrow_8_dataset_10FileFormat_unwrap(__pyx_v_file_format), ((struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem *)__pyx_v_filesystem->__pyx_vtab)->unwrap(__pyx_v_filesystem), __pyx_v_c_file_stats, __pyx_v_c_partitions);

  /* "pyarrow/_dataset.pyx":673
 *             c_partitions
 *         )
 *         self.init(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 */
  __pyx_t_8 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::Source> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L1_error)
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_FileSystemSource *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self), __pyx_t_8);

  /* "pyarrow/_dataset.pyx":621
 *         CFileSystemSource* filesystem_source
 * 
 *     def __init__(self, Schema schema not None, Expression root_partition,             # <<<<<<<<<<<<<<
 *                  FileFormat file_format not None,
 *                  FileSystem filesystem not None,
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemSource.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_stats);
  __Pyx_XDECREF((PyObject *)__pyx_v_expr);
  __Pyx_XDECREF((PyObject *)__pyx_v_root_partition);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":675
 *         self.init(GetResultValue(result))
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         Source.init(self, sp)
 *         self.filesystem_source = <CFileSystemSource*> sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_16FileSystemSource_init(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__pyx_v_self, std::shared_ptr<arrow::dataset::Source>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":676
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 *         Source.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.filesystem_source = <CFileSystemSource*> sp.get()
 * 
 */
  __pyx_f_7pyarrow_8_dataset_6Source_init(((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_v_self), __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":677
 *     cdef void init(self, const shared_ptr[CSource]& sp):
 *         Source.init(self, sp)
 *         self.filesystem_source = <CFileSystemSource*> sp.get()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->filesystem_source = ((arrow::dataset::FileSystemSource *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":675
 *         self.init(GetResultValue(result))
 * 
 *     cdef void init(self, const shared_ptr[CSource]& sp):             # <<<<<<<<<<<<<<
 *         Source.init(self, sp)
 *         self.filesystem_source = <CFileSystemSource*> sp.get()
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16FileSystemSource_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16FileSystemSource_3__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_dataset_16FileSystemSource_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16FileSystemSource_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__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("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__27, 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("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.FileSystemSource.__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("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16FileSystemSource_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16FileSystemSource_5__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_dataset_16FileSystemSource_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16FileSystemSource_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *__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("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__28, 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("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":694
 *         CDatasetFactory* factory
 * 
 *     def __init__(self, list factories):             # <<<<<<<<<<<<<<
 *         cdef:
 *             SourceFactory factory
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_14DatasetFactory_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_14DatasetFactory_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_factories = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_factories,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_factories)) != 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, "__init__") < 0)) __PYX_ERR(0, 694, __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_factories = ((PyObject*)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 694, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.DatasetFactory.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_factories), (&PyList_Type), 1, "factories", 1))) __PYX_ERR(0, 694, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_14DatasetFactory___init__(((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self), __pyx_v_factories);

  /* 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_dataset_14DatasetFactory___init__(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self, PyObject *__pyx_v_factories) {
  struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *__pyx_v_factory = 0;
  std::vector<std::shared_ptr<arrow::dataset::SourceFactory> >  __pyx_v_c_factories;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  std::shared_ptr<arrow::dataset::DatasetFactory>  __pyx_t_4;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":698
 *             SourceFactory factory
 *             vector[shared_ptr[CSourceFactory]] c_factories
 *         for factory in factories:             # <<<<<<<<<<<<<<
 *             c_factories.push_back(factory.unwrap())
 *         self.init(GetResultValue(CDatasetFactory.Make(c_factories)))
 */
  if (unlikely(__pyx_v_factories == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 698, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_factories; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 698, __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, 698, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7pyarrow_8_dataset_SourceFactory))))) __PYX_ERR(0, 698, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_factory, ((struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "pyarrow/_dataset.pyx":699
 *             vector[shared_ptr[CSourceFactory]] c_factories
 *         for factory in factories:
 *             c_factories.push_back(factory.unwrap())             # <<<<<<<<<<<<<<
 *         self.init(GetResultValue(CDatasetFactory.Make(c_factories)))
 * 
 */
    try {
      __pyx_v_c_factories.push_back(__pyx_f_7pyarrow_8_dataset_13SourceFactory_unwrap(__pyx_v_factory));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 699, __pyx_L1_error)
    }

    /* "pyarrow/_dataset.pyx":698
 *             SourceFactory factory
 *             vector[shared_ptr[CSourceFactory]] c_factories
 *         for factory in factories:             # <<<<<<<<<<<<<<
 *             c_factories.push_back(factory.unwrap())
 *         self.init(GetResultValue(CDatasetFactory.Make(c_factories)))
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":700
 *         for factory in factories:
 *             c_factories.push_back(factory.unwrap())
 *         self.init(GetResultValue(CDatasetFactory.Make(c_factories)))             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CDatasetFactory]& sp):
 */
  __pyx_t_4 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::DatasetFactory> >(arrow::dataset::DatasetFactory::Make(__pyx_v_c_factories)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 700, __pyx_L1_error)
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_t_4);

  /* "pyarrow/_dataset.pyx":694
 *         CDatasetFactory* factory
 * 
 *     def __init__(self, list factories):             # <<<<<<<<<<<<<<
 *         cdef:
 *             SourceFactory factory
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.DatasetFactory.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_factory);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":702
 *         self.init(GetResultValue(CDatasetFactory.Make(c_factories)))
 * 
 *     cdef void init(self, const shared_ptr[CDatasetFactory]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.factory = sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_14DatasetFactory_init(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self, std::shared_ptr<arrow::dataset::DatasetFactory>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":703
 * 
 *     cdef void init(self, const shared_ptr[CDatasetFactory]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.factory = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":704
 *     cdef void init(self, const shared_ptr[CDatasetFactory]& sp):
 *         self.wrapped = sp
 *         self.factory = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->factory = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":702
 *         self.init(GetResultValue(CDatasetFactory.Make(c_factories)))
 * 
 *     cdef void init(self, const shared_ptr[CDatasetFactory]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.factory = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":707
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CDatasetFactory]& sp):             # <<<<<<<<<<<<<<
 *         cdef DatasetFactory self = DatasetFactory.__new__(DatasetFactory)
 *         self.init(sp)
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_14DatasetFactory_wrap(std::shared_ptr<arrow::dataset::DatasetFactory>  &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":708
 *     @staticmethod
 *     cdef wrap(shared_ptr[CDatasetFactory]& sp):
 *         cdef DatasetFactory self = DatasetFactory.__new__(DatasetFactory)             # <<<<<<<<<<<<<<
 *         self.init(sp)
 *         return self
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_DatasetFactory(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_DatasetFactory), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":709
 *     cdef wrap(shared_ptr[CDatasetFactory]& sp):
 *         cdef DatasetFactory self = DatasetFactory.__new__(DatasetFactory)
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":710
 *         cdef DatasetFactory self = DatasetFactory.__new__(DatasetFactory)
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CDatasetFactory] unwrap(self) nogil:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":707
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CDatasetFactory]& sp):             # <<<<<<<<<<<<<<
 *         cdef DatasetFactory self = DatasetFactory.__new__(DatasetFactory)
 *         self.init(sp)
 */

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

/* "pyarrow/_dataset.pyx":712
 *         return self
 * 
 *     cdef inline shared_ptr[CDatasetFactory] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr<arrow::dataset::DatasetFactory>  __pyx_f_7pyarrow_8_dataset_14DatasetFactory_unwrap(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::DatasetFactory>  __pyx_r;

  /* "pyarrow/_dataset.pyx":713
 * 
 *     cdef inline shared_ptr[CDatasetFactory] unwrap(self) nogil:
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":712
 *         return self
 * 
 *     cdef inline shared_ptr[CDatasetFactory] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "pyarrow/_dataset.pyx":716
 * 
 *     @property
 *     def sources(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CSourceFactory] source
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_7sources_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_7sources_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_14DatasetFactory_7sources___get__(((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_7sources___get__(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self) {
  std::vector<std::shared_ptr<arrow::dataset::SourceFactory> >  __pyx_v_sources;
  std::shared_ptr<arrow::dataset::SourceFactory>  __pyx_8genexpr5__pyx_v_source;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  std::vector<std::shared_ptr<arrow::dataset::SourceFactory> > ::iterator __pyx_t_2;
  std::shared_ptr<arrow::dataset::SourceFactory>  __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_dataset.pyx":720
 *             shared_ptr[CSourceFactory] source
 *             vector[shared_ptr[CSourceFactory]] sources
 *         sources = self.factory.factories()             # <<<<<<<<<<<<<<
 *         return [SourceFactory.wrap(source) for source in sources]
 * 
 */
  __pyx_v_sources = __pyx_v_self->factory->factories();

  /* "pyarrow/_dataset.pyx":721
 *             vector[shared_ptr[CSourceFactory]] sources
 *         sources = self.factory.factories()
 *         return [SourceFactory.wrap(source) for source in sources]             # <<<<<<<<<<<<<<
 * 
 *     def inspect_schemas(self):
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_sources.begin();
    for (;;) {
      if (!(__pyx_t_2 != __pyx_v_sources.end())) break;
      __pyx_t_3 = *__pyx_t_2;
      ++__pyx_t_2;
      __pyx_8genexpr5__pyx_v_source = __pyx_t_3;
      __pyx_t_4 = __pyx_f_7pyarrow_8_dataset_13SourceFactory_wrap(__pyx_8genexpr5__pyx_v_source); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 721, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 721, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":716
 * 
 *     @property
 *     def sources(self):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CSourceFactory] source
 */

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

/* "pyarrow/_dataset.pyx":723
 *         return [SourceFactory.wrap(source) for source in sources]
 * 
 *     def inspect_schemas(self):             # <<<<<<<<<<<<<<
 *         cdef vector[shared_ptr[CSchema]] schemas
 *         schemas = GetResultValue(self.factory.InspectSchemas())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_3inspect_schemas(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_3inspect_schemas(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inspect_schemas (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_14DatasetFactory_2inspect_schemas(((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_2inspect_schemas(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self) {
  std::vector<std::shared_ptr< arrow::Schema> >  __pyx_v_schemas;
  std::shared_ptr< arrow::Schema>  __pyx_8genexpr6__pyx_v_schema;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<std::shared_ptr< arrow::Schema> >  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  std::vector<std::shared_ptr< arrow::Schema> > ::iterator __pyx_t_3;
  std::shared_ptr< arrow::Schema>  __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("inspect_schemas", 0);

  /* "pyarrow/_dataset.pyx":725
 *     def inspect_schemas(self):
 *         cdef vector[shared_ptr[CSchema]] schemas
 *         schemas = GetResultValue(self.factory.InspectSchemas())             # <<<<<<<<<<<<<<
 *         return [pyarrow_wrap_schema(schema) for schema in schemas]
 * 
 */
  __pyx_t_1 = arrow::py::GetResultValue<std::vector<std::shared_ptr< arrow::Schema> > >(__pyx_v_self->factory->InspectSchemas()); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 725, __pyx_L1_error)
  __pyx_v_schemas = __pyx_t_1;

  /* "pyarrow/_dataset.pyx":726
 *         cdef vector[shared_ptr[CSchema]] schemas
 *         schemas = GetResultValue(self.factory.InspectSchemas())
 *         return [pyarrow_wrap_schema(schema) for schema in schemas]             # <<<<<<<<<<<<<<
 * 
 *     def inspect(self):
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_v_schemas.begin();
    for (;;) {
      if (!(__pyx_t_3 != __pyx_v_schemas.end())) break;
      __pyx_t_4 = *__pyx_t_3;
      ++__pyx_t_3;
      __pyx_8genexpr6__pyx_v_schema = __pyx_t_4;
      __pyx_t_5 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_8genexpr6__pyx_v_schema); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 726, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 726, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":723
 *         return [SourceFactory.wrap(source) for source in sources]
 * 
 *     def inspect_schemas(self):             # <<<<<<<<<<<<<<
 *         cdef vector[shared_ptr[CSchema]] schemas
 *         schemas = GetResultValue(self.factory.InspectSchemas())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyarrow._dataset.DatasetFactory.inspect_schemas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":728
 *         return [pyarrow_wrap_schema(schema) for schema in schemas]
 * 
 *     def inspect(self):             # <<<<<<<<<<<<<<
 *         return pyarrow_wrap_schema(GetResultValue(self.factory.Inspect()))
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_5inspect(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_5inspect(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("inspect (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_14DatasetFactory_4inspect(((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_4inspect(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::shared_ptr< arrow::Schema>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("inspect", 0);

  /* "pyarrow/_dataset.pyx":729
 * 
 *     def inspect(self):
 *         return pyarrow_wrap_schema(GetResultValue(self.factory.Inspect()))             # <<<<<<<<<<<<<<
 * 
 *     def finish(self, Schema schema=None):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = arrow::py::GetResultValue<std::shared_ptr< arrow::Schema> >(__pyx_v_self->factory->Inspect()); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 729, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":728
 *         return [pyarrow_wrap_schema(schema) for schema in schemas]
 * 
 *     def inspect(self):             # <<<<<<<<<<<<<<
 *         return pyarrow_wrap_schema(GetResultValue(self.factory.Inspect()))
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.DatasetFactory.inspect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":731
 *         return pyarrow_wrap_schema(GetResultValue(self.factory.Inspect()))
 * 
 *     def finish(self, Schema schema=None):             # <<<<<<<<<<<<<<
 *         cdef CResult[shared_ptr[CDataset]] result
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_7finish(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_7finish(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("finish (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema,0};
    PyObject* values[1] = {0};
    values[0] = (PyObject *)((struct __pyx_obj_7pyarrow_3lib_Schema *)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_schema);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "finish") < 0)) __PYX_ERR(0, 731, __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_schema = ((struct __pyx_obj_7pyarrow_3lib_Schema *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("finish", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 731, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.DatasetFactory.finish", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_7pyarrow_3lib_Schema, 1, "schema", 0))) __PYX_ERR(0, 731, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_14DatasetFactory_6finish(((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self), __pyx_v_schema);

  /* 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_dataset_14DatasetFactory_6finish(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema) {
  arrow::Result<std::shared_ptr<arrow::dataset::Dataset> >  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  std::shared_ptr<arrow::dataset::Dataset>  __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("finish", 0);

  /* "pyarrow/_dataset.pyx":734
 *         cdef CResult[shared_ptr[CDataset]] result
 * 
 *         if schema is None:             # <<<<<<<<<<<<<<
 *             result = self.factory.Finish()
 *         else:
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_schema) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_dataset.pyx":735
 * 
 *         if schema is None:
 *             result = self.factory.Finish()             # <<<<<<<<<<<<<<
 *         else:
 *             result = self.factory.FinishWithSchema(
 */
    __pyx_v_result = __pyx_v_self->factory->Finish();

    /* "pyarrow/_dataset.pyx":734
 *         cdef CResult[shared_ptr[CDataset]] result
 * 
 *         if schema is None:             # <<<<<<<<<<<<<<
 *             result = self.factory.Finish()
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":737
 *             result = self.factory.Finish()
 *         else:
 *             result = self.factory.FinishWithSchema(             # <<<<<<<<<<<<<<
 *                 pyarrow_unwrap_schema(schema)
 *             )
 */
  /*else*/ {

    /* "pyarrow/_dataset.pyx":738
 *         else:
 *             result = self.factory.FinishWithSchema(
 *                 pyarrow_unwrap_schema(schema)             # <<<<<<<<<<<<<<
 *             )
 * 
 */
    __pyx_v_result = __pyx_v_self->factory->Finish(__pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(((PyObject *)__pyx_v_schema)));
  }
  __pyx_L3:;

  /* "pyarrow/_dataset.pyx":741
 *             )
 * 
 *         return Dataset.wrap(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::Dataset> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 741, __pyx_L1_error)
  __pyx_t_4 = __pyx_f_7pyarrow_8_dataset_7Dataset_wrap(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":731
 *         return pyarrow_wrap_schema(GetResultValue(self.factory.Inspect()))
 * 
 *     def finish(self, Schema schema=None):             # <<<<<<<<<<<<<<
 *         cdef CResult[shared_ptr[CDataset]] result
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyarrow._dataset.DatasetFactory.finish", __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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_9__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_dataset_14DatasetFactory_8__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__29, 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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.DatasetFactory.__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_11__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_dataset_14DatasetFactory_10__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_14DatasetFactory_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *__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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__30, 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("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":757
 *         CDataset* dataset
 * 
 *     def __init__(self, sources, Schema schema not None):             # <<<<<<<<<<<<<<
 *         """Create a dataset
 * 
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_7Dataset_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_7Dataset___init__[] = "Create a dataset\n\n        A schema must be passed because most of the sources' schema is\n        unknown before executing possibly expensive scanning operation, but\n        projecting, filtering, predicate pushdown requires a well defined\n        schema to work on.\n\n        Parameters\n        ----------\n        sources : list of Source\n            One or more input sources\n        schema : Schema\n            A known schema to conform to.\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_7pyarrow_8_dataset_7Dataset___init__;
#endif
static int __pyx_pw_7pyarrow_8_dataset_7Dataset_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_sources = 0;
  struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sources,&__pyx_n_s_schema,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_sources)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_schema)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 757, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 757, __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_sources = values[0];
    __pyx_v_schema = ((struct __pyx_obj_7pyarrow_3lib_Schema *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 757, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.__init__", __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, 0, "schema", 0))) __PYX_ERR(0, 757, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Dataset___init__(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self), __pyx_v_sources, __pyx_v_schema);

  /* 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_dataset_7Dataset___init__(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_sources, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema) {
  struct __pyx_obj_7pyarrow_8_dataset_Source *__pyx_v_source = 0;
  arrow::dataset::SourceVector __pyx_v_c_sources;
  arrow::Result<std::shared_ptr<arrow::dataset::Dataset> >  __pyx_v_result;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  std::shared_ptr<arrow::dataset::Dataset>  __pyx_t_5;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":777
 *             CResult[shared_ptr[CDataset]] result
 * 
 *         for source in sources:             # <<<<<<<<<<<<<<
 *             c_sources.push_back(source.unwrap())
 * 
 */
  if (likely(PyList_CheckExact(__pyx_v_sources)) || PyTuple_CheckExact(__pyx_v_sources)) {
    __pyx_t_1 = __pyx_v_sources; __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_sources); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __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, 777, __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, 777, __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, 777, __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, 777, __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, 777, __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, 777, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_7pyarrow_8_dataset_Source))))) __PYX_ERR(0, 777, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_source, ((struct __pyx_obj_7pyarrow_8_dataset_Source *)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "pyarrow/_dataset.pyx":778
 * 
 *         for source in sources:
 *             c_sources.push_back(source.unwrap())             # <<<<<<<<<<<<<<
 * 
 *         result = CDataset.Make(c_sources, pyarrow_unwrap_schema(schema))
 */
    try {
      __pyx_v_c_sources.push_back(((struct __pyx_vtabstruct_7pyarrow_8_dataset_Source *)__pyx_v_source->__pyx_vtab)->unwrap(__pyx_v_source));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 778, __pyx_L1_error)
    }

    /* "pyarrow/_dataset.pyx":777
 *             CResult[shared_ptr[CDataset]] result
 * 
 *         for source in sources:             # <<<<<<<<<<<<<<
 *             c_sources.push_back(source.unwrap())
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":780
 *             c_sources.push_back(source.unwrap())
 * 
 *         result = CDataset.Make(c_sources, pyarrow_unwrap_schema(schema))             # <<<<<<<<<<<<<<
 *         self.init(GetResultValue(result))
 * 
 */
  __pyx_v_result = arrow::dataset::Dataset::Make(__pyx_v_c_sources, __pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(((PyObject *)__pyx_v_schema)));

  /* "pyarrow/_dataset.pyx":781
 * 
 *         result = CDataset.Make(c_sources, pyarrow_unwrap_schema(schema))
 *         self.init(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CDataset]& sp):
 */
  __pyx_t_5 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::Dataset> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 781, __pyx_L1_error)
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_Dataset *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_t_5);

  /* "pyarrow/_dataset.pyx":757
 *         CDataset* dataset
 * 
 *     def __init__(self, sources, Schema schema not None):             # <<<<<<<<<<<<<<
 *         """Create a dataset
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_source);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":783
 *         self.init(GetResultValue(result))
 * 
 *     cdef void init(self, const shared_ptr[CDataset]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.dataset = sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_7Dataset_init(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, std::shared_ptr<arrow::dataset::Dataset>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":784
 * 
 *     cdef void init(self, const shared_ptr[CDataset]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.dataset = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":785
 *     cdef void init(self, const shared_ptr[CDataset]& sp):
 *         self.wrapped = sp
 *         self.dataset = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->dataset = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":783
 *         self.init(GetResultValue(result))
 * 
 *     cdef void init(self, const shared_ptr[CDataset]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.dataset = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":788
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CDataset]& sp):             # <<<<<<<<<<<<<<
 *         cdef Dataset self = Dataset.__new__(Dataset)
 *         self.init(sp)
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_7Dataset_wrap(std::shared_ptr<arrow::dataset::Dataset>  &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":789
 *     @staticmethod
 *     cdef wrap(shared_ptr[CDataset]& sp):
 *         cdef Dataset self = Dataset.__new__(Dataset)             # <<<<<<<<<<<<<<
 *         self.init(sp)
 *         return self
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_Dataset(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_Dataset), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":790
 *     cdef wrap(shared_ptr[CDataset]& sp):
 *         cdef Dataset self = Dataset.__new__(Dataset)
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_Dataset *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":791
 *         cdef Dataset self = Dataset.__new__(Dataset)
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CDataset] unwrap(self) nogil:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":788
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CDataset]& sp):             # <<<<<<<<<<<<<<
 *         cdef Dataset self = Dataset.__new__(Dataset)
 *         self.init(sp)
 */

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

/* "pyarrow/_dataset.pyx":793
 *         return self
 * 
 *     cdef inline shared_ptr[CDataset] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr<arrow::dataset::Dataset>  __pyx_f_7pyarrow_8_dataset_7Dataset_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::Dataset>  __pyx_r;

  /* "pyarrow/_dataset.pyx":794
 * 
 *     cdef inline shared_ptr[CDataset] unwrap(self) nogil:
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 *     def scan(self, columns=None, filter=None, MemoryPool memory_pool=None):
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":793
 *         return self
 * 
 *     cdef inline shared_ptr[CDataset] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "pyarrow/_dataset.pyx":796
 *         return self.wrapped
 * 
 *     def scan(self, columns=None, filter=None, MemoryPool memory_pool=None):             # <<<<<<<<<<<<<<
 *         """Builds a scan operation against the dataset.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_3scan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_7Dataset_2scan[] = "Builds a scan operation against the dataset.\n\n        It poduces a stream of ScanTasks which is meant to be a unit of work to\n        be dispatched. The tasks are not executed automatically, the user is\n        responsible to execute and dispatch the individual tasks, so custom\n        local task scheduling can be implemented.\n\n        Parameters\n        ----------\n        columns : list of str, default None\n            List of columns to project. Order and duplicates will be preserved.\n            The columns will be passed down to Sources and corresponding data\n            fragments to avoid loading, copying, and deserializing columns\n            that will not be required further down the compute chain.\n            By default all of the available columns are projected. Raises\n            an exception if any of the referenced column names does not exist\n            in the dataset's Schema.\n        filter : Expression, default None\n            Scan will return only the rows matching the filter.\n            If possible the predicate will be pushed down to exploit the\n            partition information or internal metadata found in the data\n            source, e.g. Parquet statistics. Otherwise filters the loaded\n            RecordBatches before yielding them.\n        memory_pool : MemoryPool, default None\n            For memory allocations, if required. If not specified, uses the\n            default pool.\n\n        Returns\n        -------\n        scan_tasks : iterator of ScanTask\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_3scan(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_filter = 0;
  struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scan (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_columns,&__pyx_n_s_filter,&__pyx_n_s_memory_pool,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);
    values[2] = (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  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_columns);
          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_filter);
          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_memory_pool);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scan") < 0)) __PYX_ERR(0, 796, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_columns = values[0];
    __pyx_v_filter = values[1];
    __pyx_v_memory_pool = ((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("scan", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 796, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __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, 796, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Dataset_2scan(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self), __pyx_v_columns, __pyx_v_filter, __pyx_v_memory_pool);

  /* 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_dataset_7Dataset_2scan(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_columns, PyObject *__pyx_v_filter, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool) {
  struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_scanner = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("scan", 0);

  /* "pyarrow/_dataset.pyx":828
 *         scan_tasks : iterator of ScanTask
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,             # <<<<<<<<<<<<<<
 *                           memory_pool=memory_pool)
 *         return scanner.scan()
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_columns, __pyx_v_columns) < 0) __PYX_ERR(0, 828, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_filter, __pyx_v_filter) < 0) __PYX_ERR(0, 828, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":829
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,
 *                           memory_pool=memory_pool)             # <<<<<<<<<<<<<<
 *         return scanner.scan()
 * 
 */
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_memory_pool, ((PyObject *)__pyx_v_memory_pool)) < 0) __PYX_ERR(0, 828, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":828
 *         scan_tasks : iterator of ScanTask
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,             # <<<<<<<<<<<<<<
 *                           memory_pool=memory_pool)
 *         return scanner.scan()
 */
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_Scanner), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 828, __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_v_scanner = ((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pyarrow/_dataset.pyx":830
 *         scanner = Scanner(self, columns=columns, filter=filter,
 *                           memory_pool=memory_pool)
 *         return scanner.scan()             # <<<<<<<<<<<<<<
 * 
 *     def to_batches(self, columns=None, filter=None,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_scanner), __pyx_n_s_scan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 830, __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/_dataset.pyx":796
 *         return self.wrapped
 * 
 *     def scan(self, columns=None, filter=None, MemoryPool memory_pool=None):             # <<<<<<<<<<<<<<
 *         """Builds a scan operation against the dataset.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_scanner);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7pyarrow_8_dataset_7Dataset_6generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pyarrow/_dataset.pyx":832
 *         return scanner.scan()
 * 
 *     def to_batches(self, columns=None, filter=None,             # <<<<<<<<<<<<<<
 *                    MemoryPool memory_pool=None):
 *         """Read the dataset as materialized record batches.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_5to_batches(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_7Dataset_4to_batches[] = "Read the dataset as materialized record batches.\n\n        Builds a scan operation against the dataset and sequentially executes\n        the ScanTasks as the returned generator gets consumed.\n\n        Parameters\n        ----------\n        columns : list of str, default None\n            List of columns to project. Order and duplicates will be preserved.\n            The columns will be passed down to Sources and corresponding data\n            fragments to avoid loading, copying, and deserializing columns\n            that will not be required further down the compute chain.\n            By default all of the available columns are projected. Raises\n            an exception if any of the referenced column names does not exist\n            in the dataset's Schema.\n        filter : Expression, default None\n            Scan will return only the rows matching the filter.\n            If possible the predicate will be pushed down to exploit the\n            partition information or internal metadata found in the data\n            source, e.g. Parquet statistics. Otherwise filters the loaded\n            RecordBatches before yielding them.\n        memory_pool : MemoryPool, default None\n            For memory allocations, if required. If not specified, uses the\n            default pool.\n\n        Returns\n        -------\n        record_batches : iterator of RecordBatch\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_5to_batches(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_filter = 0;
  struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_batches (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_columns,&__pyx_n_s_filter,&__pyx_n_s_memory_pool,0};
    PyObject* values[3] = {0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);

    /* "pyarrow/_dataset.pyx":833
 * 
 *     def to_batches(self, columns=None, filter=None,
 *                    MemoryPool memory_pool=None):             # <<<<<<<<<<<<<<
 *         """Read the dataset as materialized record batches.
 * 
 */
    values[2] = (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  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_columns);
          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_filter);
          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_memory_pool);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "to_batches") < 0)) __PYX_ERR(0, 832, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_columns = values[0];
    __pyx_v_filter = values[1];
    __pyx_v_memory_pool = ((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_batches", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 832, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.to_batches", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __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, 833, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Dataset_4to_batches(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self), __pyx_v_columns, __pyx_v_filter, __pyx_v_memory_pool);

  /* "pyarrow/_dataset.pyx":832
 *         return scanner.scan()
 * 
 *     def to_batches(self, columns=None, filter=None,             # <<<<<<<<<<<<<<
 *                    MemoryPool memory_pool=None):
 *         """Read the dataset as materialized record batches.
 */

  /* 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_dataset_7Dataset_4to_batches(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_columns, PyObject *__pyx_v_filter, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_batches", 0);
  __pyx_cur_scope = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *)__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct__to_batches(__pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct__to_batches, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 832, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_columns = __pyx_v_columns;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_columns);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_columns);
  __pyx_cur_scope->__pyx_v_filter = __pyx_v_filter;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_filter);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_filter);
  __pyx_cur_scope->__pyx_v_memory_pool = __pyx_v_memory_pool;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_memory_pool);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_memory_pool);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7pyarrow_8_dataset_7Dataset_6generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_to_batches, __pyx_n_s_Dataset_to_batches, __pyx_n_s_pyarrow__dataset); if (unlikely(!gen)) __PYX_ERR(0, 832, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.to_batches", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7pyarrow_8_dataset_7Dataset_6generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *__pyx_cur_scope = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *(*__pyx_t_5)(PyObject *);
  PyObject *__pyx_t_6 = NULL;
  Py_ssize_t __pyx_t_7;
  PyObject *(*__pyx_t_8)(PyObject *);
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_batches", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L8_resume_from_yield;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 832, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":863
 *         record_batches : iterator of RecordBatch
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,             # <<<<<<<<<<<<<<
 *                           memory_pool=memory_pool)
 *         for task in scanner.scan():
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_cur_scope->__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_cur_scope->__pyx_v_self));
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 863, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_columns, __pyx_cur_scope->__pyx_v_columns) < 0) __PYX_ERR(0, 863, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_filter, __pyx_cur_scope->__pyx_v_filter) < 0) __PYX_ERR(0, 863, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":864
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,
 *                           memory_pool=memory_pool)             # <<<<<<<<<<<<<<
 *         for task in scanner.scan():
 *             for batch in task.execute():
 */
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_memory_pool, ((PyObject *)__pyx_cur_scope->__pyx_v_memory_pool)) < 0) __PYX_ERR(0, 863, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":863
 *         record_batches : iterator of RecordBatch
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,             # <<<<<<<<<<<<<<
 *                           memory_pool=memory_pool)
 *         for task in scanner.scan():
 */
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_Scanner), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 863, __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_GIVEREF(__pyx_t_3);
  __pyx_cur_scope->__pyx_v_scanner = ((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pyarrow/_dataset.pyx":865
 *         scanner = Scanner(self, columns=columns, filter=filter,
 *                           memory_pool=memory_pool)
 *         for task in scanner.scan():             # <<<<<<<<<<<<<<
 *             for batch in task.execute():
 *                 yield batch
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_scanner), __pyx_n_s_scan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
    __pyx_t_2 = __pyx_t_3; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
  } else {
    __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 865, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 865, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  for (;;) {
    if (likely(!__pyx_t_5)) {
      if (likely(PyList_CheckExact(__pyx_t_2))) {
        if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 865, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 865, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_4 >= 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_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 865, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 865, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_5(__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, 865, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_task);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_task, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pyarrow/_dataset.pyx":866
 *                           memory_pool=memory_pool)
 *         for task in scanner.scan():
 *             for batch in task.execute():             # <<<<<<<<<<<<<<
 *                 yield batch
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_task, __pyx_n_s_execute); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    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_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
      __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
    } else {
      __pyx_t_7 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 866, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (likely(!__pyx_t_8)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 866, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 866, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 866, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 866, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_8(__pyx_t_1);
        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, 866, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_batch);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_batch, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_3);
      __pyx_t_3 = 0;

      /* "pyarrow/_dataset.pyx":867
 *         for task in scanner.scan():
 *             for batch in task.execute():
 *                 yield batch             # <<<<<<<<<<<<<<
 * 
 *     def to_table(self, columns=None, filter=None, use_threads=True,
 */
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_batch);
      __pyx_r = __pyx_cur_scope->__pyx_v_batch;
      __Pyx_XGIVEREF(__pyx_t_1);
      __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
      __Pyx_XGIVEREF(__pyx_t_2);
      __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
      __pyx_cur_scope->__pyx_t_2 = __pyx_t_4;
      __pyx_cur_scope->__pyx_t_3 = __pyx_t_5;
      __pyx_cur_scope->__pyx_t_4 = __pyx_t_7;
      __pyx_cur_scope->__pyx_t_5 = __pyx_t_8;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L8_resume_from_yield:;
      __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
      __pyx_cur_scope->__pyx_t_0 = 0;
      __Pyx_XGOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
      __pyx_cur_scope->__pyx_t_1 = 0;
      __Pyx_XGOTREF(__pyx_t_2);
      __pyx_t_4 = __pyx_cur_scope->__pyx_t_2;
      __pyx_t_5 = __pyx_cur_scope->__pyx_t_3;
      __pyx_t_7 = __pyx_cur_scope->__pyx_t_4;
      __pyx_t_8 = __pyx_cur_scope->__pyx_t_5;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 867, __pyx_L1_error)

      /* "pyarrow/_dataset.pyx":866
 *                           memory_pool=memory_pool)
 *         for task in scanner.scan():
 *             for batch in task.execute():             # <<<<<<<<<<<<<<
 *                 yield batch
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":865
 *         scanner = Scanner(self, columns=columns, filter=filter,
 *                           memory_pool=memory_pool)
 *         for task in scanner.scan():             # <<<<<<<<<<<<<<
 *             for batch in task.execute():
 *                 yield batch
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pyarrow/_dataset.pyx":832
 *         return scanner.scan()
 * 
 *     def to_batches(self, columns=None, filter=None,             # <<<<<<<<<<<<<<
 *                    MemoryPool memory_pool=None):
 *         """Read the dataset as materialized record batches.
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("to_batches", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":869
 *                 yield batch
 * 
 *     def to_table(self, columns=None, filter=None, use_threads=True,             # <<<<<<<<<<<<<<
 *                  MemoryPool memory_pool=None):
 *         """Read the dataset to an arrow table.
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_8to_table(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_7Dataset_7to_table[] = "Read the dataset to an arrow table.\n\n        Note that this method reads all the selected data from the dataset\n        into memory.\n\n        Parameters\n        ----------\n        columns : list of str, default None\n            List of columns to project. Order and duplicates will be preserved.\n            The columns will be passed down to Sources and corresponding data\n            fragments to avoid loading, copying, and deserializing columns\n            that will not be required further down the compute chain.\n            By default all of the available columns are projected. Raises\n            an exception if any of the referenced column names does not exist\n            in the dataset's Schema.\n        filter : Expression, default None\n            Scan will return only the rows matching the filter.\n            If possible the predicate will be pushed down to exploit the\n            partition information or internal metadata found in the data\n            source, e.g. Parquet statistics. Otherwise filters the loaded\n            RecordBatches before yielding them.\n        use_threads : boolean, default True\n            If enabled, then maximum paralellism will be used determined by\n            the number of available CPU cores.\n        memory_pool : MemoryPool, default None\n            For memory allocations, if required. If not specified, uses the\n            default pool.\n\n        Returns\n        -------\n        table : Table instance\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_8to_table(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_columns = 0;
  PyObject *__pyx_v_filter = 0;
  PyObject *__pyx_v_use_threads = 0;
  struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_table (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_columns,&__pyx_n_s_filter,&__pyx_n_s_use_threads,&__pyx_n_s_memory_pool,0};
    PyObject* values[4] = {0,0,0,0};
    values[0] = ((PyObject *)Py_None);
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_True);

    /* "pyarrow/_dataset.pyx":870
 * 
 *     def to_table(self, columns=None, filter=None, use_threads=True,
 *                  MemoryPool memory_pool=None):             # <<<<<<<<<<<<<<
 *         """Read the dataset to an arrow table.
 * 
 */
    values[3] = (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  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_columns);
          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_filter);
          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--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory_pool);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "to_table") < 0)) __PYX_ERR(0, 869, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_columns = values[0];
    __pyx_v_filter = values[1];
    __pyx_v_use_threads = values[2];
    __pyx_v_memory_pool = ((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_table", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 869, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.to_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __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, 870, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Dataset_7to_table(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self), __pyx_v_columns, __pyx_v_filter, __pyx_v_use_threads, __pyx_v_memory_pool);

  /* "pyarrow/_dataset.pyx":869
 *                 yield batch
 * 
 *     def to_table(self, columns=None, filter=None, use_threads=True,             # <<<<<<<<<<<<<<
 *                  MemoryPool memory_pool=None):
 *         """Read the dataset to an arrow table.
 */

  /* 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_dataset_7Dataset_7to_table(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self, PyObject *__pyx_v_columns, PyObject *__pyx_v_filter, PyObject *__pyx_v_use_threads, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool) {
  struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_scanner = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("to_table", 0);

  /* "pyarrow/_dataset.pyx":903
 *         table : Table instance
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,             # <<<<<<<<<<<<<<
 *                           use_threads=use_threads, memory_pool=memory_pool)
 *         return scanner.to_table()
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_columns, __pyx_v_columns) < 0) __PYX_ERR(0, 903, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_filter, __pyx_v_filter) < 0) __PYX_ERR(0, 903, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":904
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,
 *                           use_threads=use_threads, memory_pool=memory_pool)             # <<<<<<<<<<<<<<
 *         return scanner.to_table()
 * 
 */
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_use_threads, __pyx_v_use_threads) < 0) __PYX_ERR(0, 903, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_memory_pool, ((PyObject *)__pyx_v_memory_pool)) < 0) __PYX_ERR(0, 903, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":903
 *         table : Table instance
 *         """
 *         scanner = Scanner(self, columns=columns, filter=filter,             # <<<<<<<<<<<<<<
 *                           use_threads=use_threads, memory_pool=memory_pool)
 *         return scanner.to_table()
 */
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_Scanner), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 903, __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_v_scanner = ((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pyarrow/_dataset.pyx":905
 *         scanner = Scanner(self, columns=columns, filter=filter,
 *                           use_threads=use_threads, memory_pool=memory_pool)
 *         return scanner.to_table()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_scanner), __pyx_n_s_to_table); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 905, __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/_dataset.pyx":869
 *                 yield batch
 * 
 *     def to_table(self, columns=None, filter=None, use_threads=True,             # <<<<<<<<<<<<<<
 *                  MemoryPool memory_pool=None):
 *         """Read the dataset to an arrow table.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.to_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_scanner);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":908
 * 
 *     @property
 *     def sources(self):             # <<<<<<<<<<<<<<
 *         """List of the data sources"""
 *         cdef vector[shared_ptr[CSource]] sources = self.dataset.sources()
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_7sources_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_7sources_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Dataset_7sources___get__(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_7sources___get__(struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_self) {
  std::vector<std::shared_ptr<arrow::dataset::Source> >  __pyx_v_sources;
  std::shared_ptr<arrow::dataset::Source>  __pyx_8genexpr7__pyx_v_source;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  std::vector<std::shared_ptr<arrow::dataset::Source> > ::iterator __pyx_t_2;
  std::shared_ptr<arrow::dataset::Source>  __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pyarrow/_dataset.pyx":910
 *     def sources(self):
 *         """List of the data sources"""
 *         cdef vector[shared_ptr[CSource]] sources = self.dataset.sources()             # <<<<<<<<<<<<<<
 *         return [Source.wrap(source) for source in sources]
 * 
 */
  __pyx_v_sources = __pyx_v_self->dataset->sources();

  /* "pyarrow/_dataset.pyx":911
 *         """List of the data sources"""
 *         cdef vector[shared_ptr[CSource]] sources = self.dataset.sources()
 *         return [Source.wrap(source) for source in sources]             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_sources.begin();
    for (;;) {
      if (!(__pyx_t_2 != __pyx_v_sources.end())) break;
      __pyx_t_3 = *__pyx_t_2;
      ++__pyx_t_2;
      __pyx_8genexpr7__pyx_v_source = __pyx_t_3;
      __pyx_t_4 = __pyx_f_7pyarrow_8_dataset_6Source_wrap(__pyx_8genexpr7__pyx_v_source); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 911, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 911, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":908
 * 
 *     @property
 *     def sources(self):             # <<<<<<<<<<<<<<
 *         """List of the data sources"""
 *         cdef vector[shared_ptr[CSource]] sources = self.dataset.sources()
 */

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

/* "pyarrow/_dataset.pyx":914
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         """The common schema of the full Dataset"""
 *         return pyarrow_wrap_schema(self.dataset.schema())
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_6schema_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_6schema_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Dataset_6schema___get__(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self));

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

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

  /* "pyarrow/_dataset.pyx":916
 *     def schema(self):
 *         """The common schema of the full Dataset"""
 *         return pyarrow_wrap_schema(self.dataset.schema())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_schema(__pyx_v_self->dataset->schema()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":914
 * 
 *     @property
 *     def schema(self):             # <<<<<<<<<<<<<<
 *         """The common schema of the full Dataset"""
 *         return pyarrow_wrap_schema(self.dataset.schema())
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.schema.__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("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_10__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_10__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_dataset_7Dataset_9__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_9__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Dataset *__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("self.dataset,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__31, 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("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Dataset.__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("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_12__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Dataset_12__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_dataset_7Dataset_11__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_7Dataset_11__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Dataset *__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("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__32, 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("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":929
 *         CScanTask* task
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__, subclasses_instead=False)
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_8ScanTask___init__(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":930
 * 
 *     def __init__(self):
 *         _forbid_instantiation(self.__class__, subclasses_instead=False)             # <<<<<<<<<<<<<<
 * 
 *     cdef init(self, shared_ptr[CScanTask]& sp):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_forbid_instantiation); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_subclasses_instead, Py_False) < 0) __PYX_ERR(0, 930, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pyarrow/_dataset.pyx":929
 *         CScanTask* task
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__, subclasses_instead=False)
 * 
 */

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

/* "pyarrow/_dataset.pyx":932
 *         _forbid_instantiation(self.__class__, subclasses_instead=False)
 * 
 *     cdef init(self, shared_ptr[CScanTask]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.task = self.wrapped.get()
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_8ScanTask_init(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self, std::shared_ptr< arrow::dataset::ScanTask>  &__pyx_v_sp) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":933
 * 
 *     cdef init(self, shared_ptr[CScanTask]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.task = self.wrapped.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":934
 *     cdef init(self, shared_ptr[CScanTask]& sp):
 *         self.wrapped = sp
 *         self.task = self.wrapped.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->task = __pyx_v_self->wrapped.get();

  /* "pyarrow/_dataset.pyx":932
 *         _forbid_instantiation(self.__class__, subclasses_instead=False)
 * 
 *     cdef init(self, shared_ptr[CScanTask]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.task = self.wrapped.get()
 */

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

/* "pyarrow/_dataset.pyx":937
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CScanTask]& sp):             # <<<<<<<<<<<<<<
 *         cdef ScanTask self = ScanTask.__new__(ScanTask)
 *         self.init(sp)
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_8ScanTask_wrap(std::shared_ptr< arrow::dataset::ScanTask>  &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":938
 *     @staticmethod
 *     cdef wrap(shared_ptr[CScanTask]& sp):
 *         cdef ScanTask self = ScanTask.__new__(ScanTask)             # <<<<<<<<<<<<<<
 *         self.init(sp)
 *         return self
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_ScanTask(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_ScanTask), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_ScanTask *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":939
 *     cdef wrap(shared_ptr[CScanTask]& sp):
 *         cdef ScanTask self = ScanTask.__new__(ScanTask)
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  __pyx_t_1 = ((struct __pyx_vtabstruct_7pyarrow_8_dataset_ScanTask *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 939, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":940
 *         cdef ScanTask self = ScanTask.__new__(ScanTask)
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CScanTask] unwrap(self) nogil:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":937
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CScanTask]& sp):             # <<<<<<<<<<<<<<
 *         cdef ScanTask self = ScanTask.__new__(ScanTask)
 *         self.init(sp)
 */

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

/* "pyarrow/_dataset.pyx":942
 *         return self
 * 
 *     cdef inline shared_ptr[CScanTask] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr< arrow::dataset::ScanTask>  __pyx_f_7pyarrow_8_dataset_8ScanTask_unwrap(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self) {
  std::shared_ptr< arrow::dataset::ScanTask>  __pyx_r;

  /* "pyarrow/_dataset.pyx":943
 * 
 *     cdef inline shared_ptr[CScanTask] unwrap(self) nogil:
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 *     def execute(self):
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":942
 *         return self
 * 
 *     cdef inline shared_ptr[CScanTask] unwrap(self) nogil:             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
static PyObject *__pyx_gb_7pyarrow_8_dataset_8ScanTask_4generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pyarrow/_dataset.pyx":945
 *         return self.wrapped
 * 
 *     def execute(self):             # <<<<<<<<<<<<<<
 *         """Iterate through sequence of materialized record batches.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_8ScanTask_3execute(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_8ScanTask_2execute[] = "Iterate through sequence of materialized record batches.\n\n        Execution semantics are encapsulated in the particular ScanTask\n        implementation.\n\n        Returns\n        -------\n        record_batches : iterator of RecordBatch\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_8ScanTask_3execute(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("execute (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_8ScanTask_2execute(((struct __pyx_obj_7pyarrow_8_dataset_ScanTask *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_8ScanTask_2execute(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__pyx_v_self) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("execute", 0);
  __pyx_cur_scope = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *)__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct_1_execute(__pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct_1_execute, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 945, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7pyarrow_8_dataset_8ScanTask_4generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_execute, __pyx_n_s_ScanTask_execute, __pyx_n_s_pyarrow__dataset); if (unlikely(!gen)) __PYX_ERR(0, 945, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._dataset.ScanTask.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7pyarrow_8_dataset_8ScanTask_4generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *__pyx_cur_scope = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyThreadState *__pyx_t_1;
  arrow::RecordBatchIterator __pyx_t_2;
  std::shared_ptr< arrow::RecordBatch>  __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyGILState_STATE __pyx_t_6;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("execute", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L20_resume_from_yield;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 945, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":959
 *             shared_ptr[CRecordBatch] record_batch
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             iterator = move(GetResultValue(move(self.task.Execute())))
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __pyx_t_1 = _save;
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_dataset.pyx":960
 * 
 *         with nogil:
 *             iterator = move(GetResultValue(move(self.task.Execute())))             # <<<<<<<<<<<<<<
 * 
 *             while True:
 */
        __pyx_t_2 = arrow::py::GetResultValue<arrow::RecordBatchIterator>( cymove::cymove<arrow::Result<arrow::RecordBatchIterator> >(__pyx_cur_scope->__pyx_v_self->task->Execute())); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 960, __pyx_L5_error)
        __pyx_cur_scope->__pyx_v_iterator =  cymove::cymove<arrow::RecordBatchIterator>(__pyx_t_2);

        /* "pyarrow/_dataset.pyx":962
 *             iterator = move(GetResultValue(move(self.task.Execute())))
 * 
 *             while True:             # <<<<<<<<<<<<<<
 *                 record_batch = GetResultValue(iterator.Next())
 *                 if record_batch.get() == nullptr:
 */
        while (1) {

          /* "pyarrow/_dataset.pyx":963
 * 
 *             while True:
 *                 record_batch = GetResultValue(iterator.Next())             # <<<<<<<<<<<<<<
 *                 if record_batch.get() == nullptr:
 *                     raise StopIteration()
 */
          __pyx_t_3 = arrow::py::GetResultValue<std::shared_ptr< arrow::RecordBatch> >(__pyx_cur_scope->__pyx_v_iterator.Next()); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 963, __pyx_L5_error)
          __pyx_cur_scope->__pyx_v_record_batch = __pyx_t_3;

          /* "pyarrow/_dataset.pyx":964
 *             while True:
 *                 record_batch = GetResultValue(iterator.Next())
 *                 if record_batch.get() == nullptr:             # <<<<<<<<<<<<<<
 *                     raise StopIteration()
 *                 else:
 */
          __pyx_t_4 = ((__pyx_cur_scope->__pyx_v_record_batch.get() == nullptr) != 0);
          if (__pyx_t_4) {

            /* "pyarrow/_dataset.pyx":965
 *                 record_batch = GetResultValue(iterator.Next())
 *                 if record_batch.get() == nullptr:
 *                     raise StopIteration()             # <<<<<<<<<<<<<<
 *                 else:
 *                     with gil:
 */
            {
                #ifdef WITH_THREAD
                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                #endif
                /*try:*/ {
                  __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_builtin_StopIteration); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 965, __pyx_L13_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, 965, __pyx_L13_error)
                }
                /*finally:*/ {
                  __pyx_L13_error: {
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                    goto __pyx_L5_error;
                  }
                }
            }

            /* "pyarrow/_dataset.pyx":964
 *             while True:
 *                 record_batch = GetResultValue(iterator.Next())
 *                 if record_batch.get() == nullptr:             # <<<<<<<<<<<<<<
 *                     raise StopIteration()
 *                 else:
 */
          }

          /* "pyarrow/_dataset.pyx":967
 *                     raise StopIteration()
 *                 else:
 *                     with gil:             # <<<<<<<<<<<<<<
 *                         yield pyarrow_wrap_batch(record_batch)
 * 
 */
          /*else*/ {
            {
                #ifdef WITH_THREAD
                __pyx_t_6 = __Pyx_PyGILState_Ensure();
                #endif
                /*try:*/ {

                  /* "pyarrow/_dataset.pyx":968
 *                 else:
 *                     with gil:
 *                         yield pyarrow_wrap_batch(record_batch)             # <<<<<<<<<<<<<<
 * 
 * 
 */
                  __pyx_t_5 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_batch(__pyx_cur_scope->__pyx_v_record_batch); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 968, __pyx_L18_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __pyx_r = __pyx_t_5;
                  __pyx_t_5 = 0;
                  __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
                  __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
                  __Pyx_XGIVEREF(__pyx_r);
                  __Pyx_RefNannyFinishContext();
                  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
                  /* return from generator, yielding value */
                  __pyx_generator->resume_label = 1;
                  return __pyx_r;
                  __pyx_L20_resume_from_yield:;
                  __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
                  __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
                  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 968, __pyx_L18_error)
                }

                /* "pyarrow/_dataset.pyx":967
 *                     raise StopIteration()
 *                 else:
 *                     with gil:             # <<<<<<<<<<<<<<
 *                         yield pyarrow_wrap_batch(record_batch)
 * 
 */
                /*finally:*/ {
                  /*normal exit:*/{
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_t_6);
                    #endif
                    goto __pyx_L19;
                  }
                  __pyx_L18_error: {
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_t_6);
                    #endif
                    goto __pyx_L5_error;
                  }
                  __pyx_L19:;
                }
            }
          }
        }
      }

      /* "pyarrow/_dataset.pyx":959
 *             shared_ptr[CRecordBatch] record_batch
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             iterator = move(GetResultValue(move(self.task.Execute())))
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          _save = __pyx_t_1;
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L5_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          _save = __pyx_t_1;
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L6:;
      }
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pyarrow/_dataset.pyx":945
 *         return self.wrapped
 * 
 *     def execute(self):             # <<<<<<<<<<<<<<
 *         """Iterate through sequence of materialized record batches.
 * 
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_8ScanTask_6__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_8ScanTask_6__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_dataset_8ScanTask_5__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ScanTask *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_8ScanTask_5__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__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("self.task,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__33, 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("self.task,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.ScanTask.__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("self.task,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_8ScanTask_8__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_8ScanTask_8__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_dataset_8ScanTask_7__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ScanTask *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_8ScanTask_7__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScanTask *__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("self.task,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__34, 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("self.task,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1007
 *         CScanner* scanner
 * 
 *     def __init__(self, Dataset dataset, list columns=None,             # <<<<<<<<<<<<<<
 *                  Expression filter=None, bint use_threads=True,
 *                  MemoryPool memory_pool=None):
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_7Scanner_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_7Scanner_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_dataset = 0;
  PyObject *__pyx_v_columns = 0;
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_filter = 0;
  int __pyx_v_use_threads;
  struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset,&__pyx_n_s_columns,&__pyx_n_s_filter,&__pyx_n_s_use_threads,&__pyx_n_s_memory_pool,0};
    PyObject* values[5] = {0,0,0,0,0};
    values[1] = ((PyObject*)Py_None);

    /* "pyarrow/_dataset.pyx":1008
 * 
 *     def __init__(self, Dataset dataset, list columns=None,
 *                  Expression filter=None, bint use_threads=True,             # <<<<<<<<<<<<<<
 *                  MemoryPool memory_pool=None):
 *         cdef:
 */
    values[2] = (PyObject *)((struct __pyx_obj_7pyarrow_8_dataset_Expression *)Py_None);

    /* "pyarrow/_dataset.pyx":1009
 *     def __init__(self, Dataset dataset, list columns=None,
 *                  Expression filter=None, bint use_threads=True,
 *                  MemoryPool memory_pool=None):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CScanContext] context
 */
    values[4] = (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  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_dataset)) != 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_columns);
          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_filter);
          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_use_threads);
          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_memory_pool);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1007, __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_dataset = ((struct __pyx_obj_7pyarrow_8_dataset_Dataset *)values[0]);
    __pyx_v_columns = ((PyObject*)values[1]);
    __pyx_v_filter = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[2]);
    if (values[3]) {
      __pyx_v_use_threads = __Pyx_PyObject_IsTrue(values[3]); if (unlikely((__pyx_v_use_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1008, __pyx_L3_error)
    } else {

      /* "pyarrow/_dataset.pyx":1008
 * 
 *     def __init__(self, Dataset dataset, list columns=None,
 *                  Expression filter=None, bint use_threads=True,             # <<<<<<<<<<<<<<
 *                  MemoryPool memory_pool=None):
 *         cdef:
 */
      __pyx_v_use_threads = ((int)1);
    }
    __pyx_v_memory_pool = ((struct __pyx_obj_7pyarrow_3lib_MemoryPool *)values[4]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1007, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Scanner.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dataset), __pyx_ptype_7pyarrow_8_dataset_Dataset, 1, "dataset", 0))) __PYX_ERR(0, 1007, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_columns), (&PyList_Type), 1, "columns", 1))) __PYX_ERR(0, 1007, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_filter), __pyx_ptype_7pyarrow_8_dataset_Expression, 1, "filter", 0))) __PYX_ERR(0, 1008, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_memory_pool), __pyx_ptype_7pyarrow_3lib_MemoryPool, 1, "memory_pool", 0))) __PYX_ERR(0, 1009, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Scanner___init__(((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_v_self), __pyx_v_dataset, __pyx_v_columns, __pyx_v_filter, __pyx_v_use_threads, __pyx_v_memory_pool);

  /* "pyarrow/_dataset.pyx":1007
 *         CScanner* scanner
 * 
 *     def __init__(self, Dataset dataset, list columns=None,             # <<<<<<<<<<<<<<
 *                  Expression filter=None, bint use_threads=True,
 *                  MemoryPool memory_pool=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_dataset_7Scanner___init__(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Dataset *__pyx_v_dataset, PyObject *__pyx_v_columns, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_filter, int __pyx_v_use_threads, struct __pyx_obj_7pyarrow_3lib_MemoryPool *__pyx_v_memory_pool) {
  std::shared_ptr<arrow::dataset::ScanContext>  __pyx_v_context;
  std::shared_ptr<arrow::dataset::ScannerBuilder>  __pyx_v_builder;
  std::shared_ptr<arrow::dataset::Expression>  __pyx_v_filter_expression;
  std::vector<std::string>  __pyx_v_columns_to_project;
  std::shared_ptr<arrow::dataset::Scanner>  __pyx_v_scanner;
  PyObject *__pyx_8genexpr8__pyx_v_c = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  std::shared_ptr<arrow::dataset::ScanContext>  __pyx_t_1;
  std::shared_ptr<arrow::dataset::ScannerBuilder>  __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  Py_ssize_t __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  std::vector<std::string>  __pyx_t_11;
  int __pyx_t_12;
  std::shared_ptr<arrow::dataset::Expression>  __pyx_t_13;
  std::shared_ptr<arrow::dataset::Scanner>  __pyx_t_14;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1017
 * 
 *         # create scan context
 *         context = make_shared[CScanContext]()             # <<<<<<<<<<<<<<
 *         context.get().pool = maybe_unbox_memory_pool(memory_pool)
 * 
 */
  try {
    __pyx_t_1 = std::make_shared<arrow::dataset::ScanContext>();
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1017, __pyx_L1_error)
  }
  __pyx_v_context = __pyx_t_1;

  /* "pyarrow/_dataset.pyx":1018
 *         # create scan context
 *         context = make_shared[CScanContext]()
 *         context.get().pool = maybe_unbox_memory_pool(memory_pool)             # <<<<<<<<<<<<<<
 * 
 *         # create scanner builder
 */
  __pyx_v_context.get()->pool = __pyx_f_7pyarrow_3lib_maybe_unbox_memory_pool(__pyx_v_memory_pool);

  /* "pyarrow/_dataset.pyx":1021
 * 
 *         # create scanner builder
 *         builder = GetResultValue(             # <<<<<<<<<<<<<<
 *             dataset.unwrap().get().NewScanWithContext(context)
 *         )
 */
  __pyx_t_2 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::ScannerBuilder> >(__pyx_f_7pyarrow_8_dataset_7Dataset_unwrap(__pyx_v_dataset).get()->NewScan(__pyx_v_context)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1021, __pyx_L1_error)
  __pyx_v_builder = __pyx_t_2;

  /* "pyarrow/_dataset.pyx":1026
 * 
 *         # set the builder's properties
 *         if columns is not None:             # <<<<<<<<<<<<<<
 *             columns_to_project = [tobytes(c) for c in columns]
 *             check_status(builder.get().Project(columns_to_project))
 */
  __pyx_t_3 = (__pyx_v_columns != ((PyObject*)Py_None));
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "pyarrow/_dataset.pyx":1027
 *         # set the builder's properties
 *         if columns is not None:
 *             columns_to_project = [tobytes(c) for c in columns]             # <<<<<<<<<<<<<<
 *             check_status(builder.get().Project(columns_to_project))
 *         if filter is not None:
 */
    { /* enter inner scope */
      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1027, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__pyx_v_columns == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
        __PYX_ERR(0, 1027, __pyx_L6_error)
      }
      __pyx_t_6 = __pyx_v_columns; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
      for (;;) {
        if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_8); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 1027, __pyx_L6_error)
        #else
        __pyx_t_8 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1027, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        #endif
        __Pyx_XDECREF_SET(__pyx_8genexpr8__pyx_v_c, __pyx_t_8);
        __pyx_t_8 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1027, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
          }
        }
        __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_8genexpr8__pyx_v_c) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_8genexpr8__pyx_v_c);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1027, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 1027, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_c); __pyx_8genexpr8__pyx_v_c = 0;
      goto __pyx_L9_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_c); __pyx_8genexpr8__pyx_v_c = 0;
      goto __pyx_L1_error;
      __pyx_L9_exit_scope:;
    } /* exit inner scope */
    __pyx_t_11 = __pyx_convert_vector_from_py_std_3a__3a_string(__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1027, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_columns_to_project = __pyx_t_11;

    /* "pyarrow/_dataset.pyx":1028
 *         if columns is not None:
 *             columns_to_project = [tobytes(c) for c in columns]
 *             check_status(builder.get().Project(columns_to_project))             # <<<<<<<<<<<<<<
 *         if filter is not None:
 *             filter_expression = GetResultValue(
 */
    __pyx_t_12 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_builder.get()->Project(__pyx_v_columns_to_project)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1028, __pyx_L1_error)

    /* "pyarrow/_dataset.pyx":1026
 * 
 *         # set the builder's properties
 *         if columns is not None:             # <<<<<<<<<<<<<<
 *             columns_to_project = [tobytes(c) for c in columns]
 *             check_status(builder.get().Project(columns_to_project))
 */
  }

  /* "pyarrow/_dataset.pyx":1029
 *             columns_to_project = [tobytes(c) for c in columns]
 *             check_status(builder.get().Project(columns_to_project))
 *         if filter is not None:             # <<<<<<<<<<<<<<
 *             filter_expression = GetResultValue(
 *                 CInsertImplicitCasts(
 */
  __pyx_t_4 = (((PyObject *)__pyx_v_filter) != Py_None);
  __pyx_t_3 = (__pyx_t_4 != 0);
  if (__pyx_t_3) {

    /* "pyarrow/_dataset.pyx":1030
 *             check_status(builder.get().Project(columns_to_project))
 *         if filter is not None:
 *             filter_expression = GetResultValue(             # <<<<<<<<<<<<<<
 *                 CInsertImplicitCasts(
 *                     deref(filter.unwrap().get()),
 */
    __pyx_t_13 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::Expression> >(arrow::dataset::InsertImplicitCasts((*__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_filter).get()), (*__pyx_v_builder.get()->schema().get()))); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1030, __pyx_L1_error)
    __pyx_v_filter_expression = __pyx_t_13;

    /* "pyarrow/_dataset.pyx":1036
 *                 )
 *             )
 *             check_status(builder.get().Filter(filter_expression))             # <<<<<<<<<<<<<<
 *         if use_threads is not None:
 *             check_status(builder.get().UseThreads(use_threads))
 */
    __pyx_t_12 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_builder.get()->Filter(__pyx_v_filter_expression)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1036, __pyx_L1_error)

    /* "pyarrow/_dataset.pyx":1029
 *             columns_to_project = [tobytes(c) for c in columns]
 *             check_status(builder.get().Project(columns_to_project))
 *         if filter is not None:             # <<<<<<<<<<<<<<
 *             filter_expression = GetResultValue(
 *                 CInsertImplicitCasts(
 */
  }

  /* "pyarrow/_dataset.pyx":1037
 *             )
 *             check_status(builder.get().Filter(filter_expression))
 *         if use_threads is not None:             # <<<<<<<<<<<<<<
 *             check_status(builder.get().UseThreads(use_threads))
 * 
 */
  __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_use_threads); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = (__pyx_t_5 != Py_None);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {

    /* "pyarrow/_dataset.pyx":1038
 *             check_status(builder.get().Filter(filter_expression))
 *         if use_threads is not None:
 *             check_status(builder.get().UseThreads(use_threads))             # <<<<<<<<<<<<<<
 * 
 *         # instantiate the scanner object
 */
    __pyx_t_12 = __pyx_f_7pyarrow_3lib_check_status(__pyx_v_builder.get()->UseThreads(__pyx_v_use_threads)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 1038, __pyx_L1_error)

    /* "pyarrow/_dataset.pyx":1037
 *             )
 *             check_status(builder.get().Filter(filter_expression))
 *         if use_threads is not None:             # <<<<<<<<<<<<<<
 *             check_status(builder.get().UseThreads(use_threads))
 * 
 */
  }

  /* "pyarrow/_dataset.pyx":1041
 * 
 *         # instantiate the scanner object
 *         scanner = GetResultValue(builder.get().Finish())             # <<<<<<<<<<<<<<
 *         self.init(scanner)
 * 
 */
  __pyx_t_14 = arrow::py::GetResultValue<std::shared_ptr<arrow::dataset::Scanner> >(__pyx_v_builder.get()->Finish()); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1041, __pyx_L1_error)
  __pyx_v_scanner = __pyx_t_14;

  /* "pyarrow/_dataset.pyx":1042
 *         # instantiate the scanner object
 *         scanner = GetResultValue(builder.get().Finish())
 *         self.init(scanner)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, shared_ptr[CScanner]& sp):
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_Scanner *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_scanner);

  /* "pyarrow/_dataset.pyx":1007
 *         CScanner* scanner
 * 
 *     def __init__(self, Dataset dataset, list columns=None,             # <<<<<<<<<<<<<<
 *                  Expression filter=None, bint use_threads=True,
 *                  MemoryPool memory_pool=None):
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __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_AddTraceback("pyarrow._dataset.Scanner.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_c);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1044
 *         self.init(scanner)
 * 
 *     cdef void init(self, shared_ptr[CScanner]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.scanner = sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_7Scanner_init(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self, std::shared_ptr<arrow::dataset::Scanner>  &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":1045
 * 
 *     cdef void init(self, shared_ptr[CScanner]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.scanner = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":1046
 *     cdef void init(self, shared_ptr[CScanner]& sp):
 *         self.wrapped = sp
 *         self.scanner = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->scanner = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":1044
 *         self.init(scanner)
 * 
 *     cdef void init(self, shared_ptr[CScanner]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.scanner = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":1049
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CScanner]& sp):             # <<<<<<<<<<<<<<
 *         cdef Scanner self = Scanner.__new__(Scanner)
 *         self.init(sp)
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_7Scanner_wrap(std::shared_ptr<arrow::dataset::Scanner>  &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":1050
 *     @staticmethod
 *     cdef wrap(shared_ptr[CScanner]& sp):
 *         cdef Scanner self = Scanner.__new__(Scanner)             # <<<<<<<<<<<<<<
 *         self.init(sp)
 *         return self
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_Scanner(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_Scanner), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1050, __pyx_L1_error)
  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
  __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":1051
 *     cdef wrap(shared_ptr[CScanner]& sp):
 *         cdef Scanner self = Scanner.__new__(Scanner)
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_Scanner *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":1052
 *         cdef Scanner self = Scanner.__new__(Scanner)
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def scan(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1049
 * 
 *     @staticmethod
 *     cdef wrap(shared_ptr[CScanner]& sp):             # <<<<<<<<<<<<<<
 *         cdef Scanner self = Scanner.__new__(Scanner)
 *         self.init(sp)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Scanner.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_self);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_7pyarrow_8_dataset_7Scanner_4generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pyarrow/_dataset.pyx":1054
 *         return self
 * 
 *     def scan(self):             # <<<<<<<<<<<<<<
 *         """Returns a stream of ScanTasks
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_3scan(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_7Scanner_2scan[] = "Returns a stream of ScanTasks\n\n        The caller is responsible to dispatch/schedule said tasks. Tasks should\n        be safe to run in a concurrent fashion and outlive the iterator.\n\n        Returns\n        -------\n        scan_tasks : iterator of ScanTask\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_3scan(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scan (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Scanner_2scan(((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_2scan(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scan", 0);
  __pyx_cur_scope = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *)__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct_2_scan(__pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct_2_scan, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1054, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7pyarrow_8_dataset_7Scanner_4generator2, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_scan, __pyx_n_s_Scanner_scan, __pyx_n_s_pyarrow__dataset); if (unlikely(!gen)) __PYX_ERR(0, 1054, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Scanner.scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_7pyarrow_8_dataset_7Scanner_4generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *__pyx_cur_scope = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  arrow::dataset::ScanTaskIterator __pyx_t_1;
  std::shared_ptr< arrow::dataset::ScanTask>  __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("scan", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L7_resume_from_yield;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1054, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":1068
 *             shared_ptr[CScanTask] task
 * 
 *         iterator = move(GetResultValue(move(self.scanner.Scan())))             # <<<<<<<<<<<<<<
 * 
 *         while True:
 */
  __pyx_t_1 = arrow::py::GetResultValue<arrow::dataset::ScanTaskIterator>( cymove::cymove<arrow::Result<arrow::dataset::ScanTaskIterator> >(__pyx_cur_scope->__pyx_v_self->scanner->Scan())); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1068, __pyx_L1_error)
  __pyx_cur_scope->__pyx_v_iterator =  cymove::cymove<arrow::dataset::ScanTaskIterator>(__pyx_t_1);

  /* "pyarrow/_dataset.pyx":1070
 *         iterator = move(GetResultValue(move(self.scanner.Scan())))
 * 
 *         while True:             # <<<<<<<<<<<<<<
 *             task = GetResultValue(iterator.Next())
 *             if task.get() == nullptr:
 */
  while (1) {

    /* "pyarrow/_dataset.pyx":1071
 * 
 *         while True:
 *             task = GetResultValue(iterator.Next())             # <<<<<<<<<<<<<<
 *             if task.get() == nullptr:
 *                 raise StopIteration()
 */
    __pyx_t_2 = arrow::py::GetResultValue<std::shared_ptr< arrow::dataset::ScanTask> >(__pyx_cur_scope->__pyx_v_iterator.Next()); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1071, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_task = __pyx_t_2;

    /* "pyarrow/_dataset.pyx":1072
 *         while True:
 *             task = GetResultValue(iterator.Next())
 *             if task.get() == nullptr:             # <<<<<<<<<<<<<<
 *                 raise StopIteration()
 *             else:
 */
    __pyx_t_3 = ((__pyx_cur_scope->__pyx_v_task.get() == nullptr) != 0);
    if (unlikely(__pyx_t_3)) {

      /* "pyarrow/_dataset.pyx":1073
 *             task = GetResultValue(iterator.Next())
 *             if task.get() == nullptr:
 *                 raise StopIteration()             # <<<<<<<<<<<<<<
 *             else:
 *                 yield ScanTask.wrap(task)
 */
      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_builtin_StopIteration); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1073, __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, 1073, __pyx_L1_error)

      /* "pyarrow/_dataset.pyx":1072
 *         while True:
 *             task = GetResultValue(iterator.Next())
 *             if task.get() == nullptr:             # <<<<<<<<<<<<<<
 *                 raise StopIteration()
 *             else:
 */
    }

    /* "pyarrow/_dataset.pyx":1075
 *                 raise StopIteration()
 *             else:
 *                 yield ScanTask.wrap(task)             # <<<<<<<<<<<<<<
 * 
 *     def to_table(self):
 */
    /*else*/ {
      __pyx_t_4 = __pyx_f_7pyarrow_8_dataset_8ScanTask_wrap(__pyx_cur_scope->__pyx_v_task); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1075, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L7_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1075, __pyx_L1_error)
    }
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pyarrow/_dataset.pyx":1054
 *         return self
 * 
 *     def scan(self):             # <<<<<<<<<<<<<<
 *         """Returns a stream of ScanTasks
 * 
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("scan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1077
 *                 yield ScanTask.wrap(task)
 * 
 *     def to_table(self):             # <<<<<<<<<<<<<<
 *         """Convert a Scanner into a Table.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_6to_table(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_7Scanner_5to_table[] = "Convert a Scanner into a Table.\n\n        Use this convenience utility with care. This will serially materialize\n        the Scan result in memory before creating the Table.\n\n        Returns\n        -------\n        table : Table\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_6to_table(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_table (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_7Scanner_5to_table(((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_5to_table(struct __pyx_obj_7pyarrow_8_dataset_Scanner *__pyx_v_self) {
  arrow::Result<std::shared_ptr< arrow::Table> >  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::shared_ptr< arrow::Table>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("to_table", 0);

  /* "pyarrow/_dataset.pyx":1089
 *         cdef CResult[shared_ptr[CTable]] result
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             result = self.scanner.ToTable()
 * 
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "pyarrow/_dataset.pyx":1090
 * 
 *         with nogil:
 *             result = self.scanner.ToTable()             # <<<<<<<<<<<<<<
 * 
 *         return pyarrow_wrap_table(GetResultValue(result))
 */
        __pyx_v_result = __pyx_v_self->scanner->ToTable();
      }

      /* "pyarrow/_dataset.pyx":1089
 *         cdef CResult[shared_ptr[CTable]] result
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             result = self.scanner.ToTable()
 * 
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }

  /* "pyarrow/_dataset.pyx":1092
 *             result = self.scanner.ToTable()
 * 
 *         return pyarrow_wrap_table(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = arrow::py::GetResultValue<std::shared_ptr< arrow::Table> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1092, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_table(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1077
 *                 yield ScanTask.wrap(task)
 * 
 *     def to_table(self):             # <<<<<<<<<<<<<<
 *         """Convert a Scanner into a Table.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.Scanner.to_table", __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("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_8__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_8__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_dataset_7Scanner_7__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_7__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Scanner *__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("self.scanner,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__35, 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("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Scanner.__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("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_10__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_7Scanner_10__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_dataset_7Scanner_9__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Scanner *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_7Scanner_9__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Scanner *__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("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__36, 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("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1095
 * 
 * 
 * def _binop(fn, left, right):             # <<<<<<<<<<<<<<
 *     # cython doesn't support reverse operands like __radd__ just passes the
 *     # arguments in the same order as the binary operator called
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_3_binop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_7pyarrow_8_dataset_3_binop = {"_binop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_3_binop, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7pyarrow_8_dataset_3_binop(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_fn = 0;
  PyObject *__pyx_v_left = 0;
  PyObject *__pyx_v_right = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_binop (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fn,&__pyx_n_s_left,&__pyx_n_s_right,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fn)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_binop", 1, 3, 3, 1); __PYX_ERR(0, 1095, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_binop", 1, 3, 3, 2); __PYX_ERR(0, 1095, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_binop") < 0)) __PYX_ERR(0, 1095, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_fn = values[0];
    __pyx_v_left = values[1];
    __pyx_v_right = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_binop", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1095, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset._binop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_2_binop(__pyx_self, __pyx_v_fn, __pyx_v_left, __pyx_v_right);

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_2_binop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fn, PyObject *__pyx_v_left, PyObject *__pyx_v_right) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  __Pyx_RefNannySetupContext("_binop", 0);
  __Pyx_INCREF(__pyx_v_left);
  __Pyx_INCREF(__pyx_v_right);

  /* "pyarrow/_dataset.pyx":1099
 *     # arguments in the same order as the binary operator called
 * 
 *     if isinstance(left, Expression) and isinstance(right, Expression):             # <<<<<<<<<<<<<<
 *         pass
 *     elif isinstance(left, Expression):
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_left, __pyx_ptype_7pyarrow_8_dataset_Expression); 
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_right, __pyx_ptype_7pyarrow_8_dataset_Expression); 
  __pyx_t_2 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":1101
 *     if isinstance(left, Expression) and isinstance(right, Expression):
 *         pass
 *     elif isinstance(left, Expression):             # <<<<<<<<<<<<<<
 *         try:
 *             right = ScalarExpression(right)
 */
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_left, __pyx_ptype_7pyarrow_8_dataset_Expression); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_dataset.pyx":1102
 *         pass
 *     elif isinstance(left, Expression):
 *         try:             # <<<<<<<<<<<<<<
 *             right = ScalarExpression(right)
 *         except TypeError:
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      /*try:*/ {

        /* "pyarrow/_dataset.pyx":1103
 *     elif isinstance(left, Expression):
 *         try:
 *             right = ScalarExpression(right)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
        __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_ScalarExpression), __pyx_v_right); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1103, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF_SET(__pyx_v_right, __pyx_t_7);
        __pyx_t_7 = 0;

        /* "pyarrow/_dataset.pyx":1102
 *         pass
 *     elif isinstance(left, Expression):
 *         try:             # <<<<<<<<<<<<<<
 *             right = ScalarExpression(right)
 *         except TypeError:
 */
      }
      __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_L11_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;

      /* "pyarrow/_dataset.pyx":1104
 *         try:
 *             right = ScalarExpression(right)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 * 
 */
      __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_8) {
        __Pyx_AddTraceback("pyarrow._dataset._binop", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(0, 1104, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_t_10);

        /* "pyarrow/_dataset.pyx":1105
 *             right = ScalarExpression(right)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *     elif isinstance(right, Expression):
 */
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_builtin_NotImplemented);
        __pyx_r = __pyx_builtin_NotImplemented;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L9_except_return;
      }
      goto __pyx_L8_except_error;
      __pyx_L8_except_error:;

      /* "pyarrow/_dataset.pyx":1102
 *         pass
 *     elif isinstance(left, Expression):
 *         try:             # <<<<<<<<<<<<<<
 *             right = ScalarExpression(right)
 *         except TypeError:
 */
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L1_error;
      __pyx_L9_except_return:;
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L0;
      __pyx_L11_try_end:;
    }

    /* "pyarrow/_dataset.pyx":1101
 *     if isinstance(left, Expression) and isinstance(right, Expression):
 *         pass
 *     elif isinstance(left, Expression):             # <<<<<<<<<<<<<<
 *         try:
 *             right = ScalarExpression(right)
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":1107
 *             return NotImplemented
 * 
 *     elif isinstance(right, Expression):             # <<<<<<<<<<<<<<
 *         try:
 *             left = ScalarExpression(left)
 */
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_right, __pyx_ptype_7pyarrow_8_dataset_Expression); 
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (likely(__pyx_t_1)) {

    /* "pyarrow/_dataset.pyx":1108
 * 
 *     elif isinstance(right, Expression):
 *         try:             # <<<<<<<<<<<<<<
 *             left = ScalarExpression(left)
 *         except TypeError:
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_4);
      /*try:*/ {

        /* "pyarrow/_dataset.pyx":1109
 *     elif isinstance(right, Expression):
 *         try:
 *             left = ScalarExpression(left)             # <<<<<<<<<<<<<<
 *         except TypeError:
 *             return NotImplemented
 */
        __pyx_t_10 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_ScalarExpression), __pyx_v_left); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1109, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF_SET(__pyx_v_left, __pyx_t_10);
        __pyx_t_10 = 0;

        /* "pyarrow/_dataset.pyx":1108
 * 
 *     elif isinstance(right, Expression):
 *         try:             # <<<<<<<<<<<<<<
 *             left = ScalarExpression(left)
 *         except TypeError:
 */
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L19_try_end;
      __pyx_L14_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "pyarrow/_dataset.pyx":1110
 *         try:
 *             left = ScalarExpression(left)
 *         except TypeError:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 *     else:
 */
      __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_8) {
        __Pyx_AddTraceback("pyarrow._dataset._binop", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_9, &__pyx_t_7) < 0) __PYX_ERR(0, 1110, __pyx_L16_except_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_t_7);

        /* "pyarrow/_dataset.pyx":1111
 *             left = ScalarExpression(left)
 *         except TypeError:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 *     else:
 *         raise TypeError('Neither left nor right arguments are Expressions')
 */
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_builtin_NotImplemented);
        __pyx_r = __pyx_builtin_NotImplemented;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L17_except_return;
      }
      goto __pyx_L16_except_error;
      __pyx_L16_except_error:;

      /* "pyarrow/_dataset.pyx":1108
 * 
 *     elif isinstance(right, Expression):
 *         try:             # <<<<<<<<<<<<<<
 *             left = ScalarExpression(left)
 *         except TypeError:
 */
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      goto __pyx_L1_error;
      __pyx_L17_except_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_5, __pyx_t_4);
      goto __pyx_L0;
      __pyx_L19_try_end:;
    }

    /* "pyarrow/_dataset.pyx":1107
 *             return NotImplemented
 * 
 *     elif isinstance(right, Expression):             # <<<<<<<<<<<<<<
 *         try:
 *             left = ScalarExpression(left)
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":1113
 *             return NotImplemented
 *     else:
 *         raise TypeError('Neither left nor right arguments are Expressions')             # <<<<<<<<<<<<<<
 * 
 *     return fn(left, right)
 */
  /*else*/ {
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_Raise(__pyx_t_7, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __PYX_ERR(0, 1113, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "pyarrow/_dataset.pyx":1115
 *         raise TypeError('Neither left nor right arguments are Expressions')
 * 
 *     return fn(left, right)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_fn);
  __pyx_t_9 = __pyx_v_fn; __pyx_t_10 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_9)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_left, __pyx_v_right};
    __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_7);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_v_left, __pyx_v_right};
    __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_7);
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_INCREF(__pyx_v_left);
    __Pyx_GIVEREF(__pyx_v_left);
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_8, __pyx_v_left);
    __Pyx_INCREF(__pyx_v_right);
    __Pyx_GIVEREF(__pyx_v_right);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_8, __pyx_v_right);
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1095
 * 
 * 
 * def _binop(fn, left, right):             # <<<<<<<<<<<<<<
 *     # cython doesn't support reverse operands like __radd__ just passes the
 *     # arguments in the same order as the binary operator called
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pyarrow._dataset._binop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_left);
  __Pyx_XDECREF(__pyx_v_right);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1124
 *         CExpression* expr
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

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

static int __pyx_pf_7pyarrow_8_dataset_10Expression___init__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1125
 * 
 *     def __init__(self):
 *         _forbid_instantiation(self.__class__)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_forbid_instantiation); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1125, __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, 1125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":1124
 *         CExpression* expr
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         _forbid_instantiation(self.__class__)
 * 
 */

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

/* "pyarrow/_dataset.pyx":1127
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.expr = sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_10Expression_init(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":1128
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         self.wrapped = sp             # <<<<<<<<<<<<<<
 *         self.expr = sp.get()
 * 
 */
  __pyx_v_self->wrapped = __pyx_v_sp;

  /* "pyarrow/_dataset.pyx":1129
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         self.wrapped = sp
 *         self.expr = sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __pyx_v_self->expr = __pyx_v_sp.get();

  /* "pyarrow/_dataset.pyx":1127
 *         _forbid_instantiation(self.__class__)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         self.wrapped = sp
 *         self.expr = sp.get()
 */

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

/* "pyarrow/_dataset.pyx":1132
 * 
 *     @staticmethod
 *     cdef wrap(const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         cdef Expression self
 * 
 */

static PyObject *__pyx_f_7pyarrow_8_dataset_10Expression_wrap(std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self = 0;
  enum arrow::dataset::ExpressionType::type __pyx_v_typ;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("wrap", 0);

  /* "pyarrow/_dataset.pyx":1135
 *         cdef Expression self
 * 
 *         typ = sp.get().type()             # <<<<<<<<<<<<<<
 *         if typ == CExpressionType_FIELD:
 *             self = FieldExpression.__new__(FieldExpression)
 */
  __pyx_v_typ = __pyx_v_sp.get()->type();

  /* "pyarrow/_dataset.pyx":1136
 * 
 *         typ = sp.get().type()
 *         if typ == CExpressionType_FIELD:             # <<<<<<<<<<<<<<
 *             self = FieldExpression.__new__(FieldExpression)
 *         elif typ == CExpressionType_SCALAR:
 */
  switch (__pyx_v_typ) {
    case arrow::dataset::ExpressionType::type::FIELD:

    /* "pyarrow/_dataset.pyx":1137
 *         typ = sp.get().type()
 *         if typ == CExpressionType_FIELD:
 *             self = FieldExpression.__new__(FieldExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_SCALAR:
 *             self = ScalarExpression.__new__(ScalarExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_FieldExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_FieldExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1137, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1137, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1136
 * 
 *         typ = sp.get().type()
 *         if typ == CExpressionType_FIELD:             # <<<<<<<<<<<<<<
 *             self = FieldExpression.__new__(FieldExpression)
 *         elif typ == CExpressionType_SCALAR:
 */
    break;
    case arrow::dataset::ExpressionType::type::SCALAR:

    /* "pyarrow/_dataset.pyx":1139
 *             self = FieldExpression.__new__(FieldExpression)
 *         elif typ == CExpressionType_SCALAR:
 *             self = ScalarExpression.__new__(ScalarExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_NOT:
 *             self = NotExpression.__new__(NotExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_ScalarExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_ScalarExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1139, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1138
 *         if typ == CExpressionType_FIELD:
 *             self = FieldExpression.__new__(FieldExpression)
 *         elif typ == CExpressionType_SCALAR:             # <<<<<<<<<<<<<<
 *             self = ScalarExpression.__new__(ScalarExpression)
 *         elif typ == CExpressionType_NOT:
 */
    break;
    case arrow::dataset::ExpressionType::type::NOT:

    /* "pyarrow/_dataset.pyx":1141
 *             self = ScalarExpression.__new__(ScalarExpression)
 *         elif typ == CExpressionType_NOT:
 *             self = NotExpression.__new__(NotExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_CAST:
 *             self = CastExpression.__new__(CastExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_NotExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_NotExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1141, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1141, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1140
 *         elif typ == CExpressionType_SCALAR:
 *             self = ScalarExpression.__new__(ScalarExpression)
 *         elif typ == CExpressionType_NOT:             # <<<<<<<<<<<<<<
 *             self = NotExpression.__new__(NotExpression)
 *         elif typ == CExpressionType_CAST:
 */
    break;
    case arrow::dataset::ExpressionType::type::CAST:

    /* "pyarrow/_dataset.pyx":1143
 *             self = NotExpression.__new__(NotExpression)
 *         elif typ == CExpressionType_CAST:
 *             self = CastExpression.__new__(CastExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_AND:
 *             self = AndExpression.__new__(AndExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_CastExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_CastExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1143, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1143, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1142
 *         elif typ == CExpressionType_NOT:
 *             self = NotExpression.__new__(NotExpression)
 *         elif typ == CExpressionType_CAST:             # <<<<<<<<<<<<<<
 *             self = CastExpression.__new__(CastExpression)
 *         elif typ == CExpressionType_AND:
 */
    break;
    case arrow::dataset::ExpressionType::type::AND:

    /* "pyarrow/_dataset.pyx":1145
 *             self = CastExpression.__new__(CastExpression)
 *         elif typ == CExpressionType_AND:
 *             self = AndExpression.__new__(AndExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_OR:
 *             self = OrExpression.__new__(OrExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_AndExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_AndExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1145, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1145, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1144
 *         elif typ == CExpressionType_CAST:
 *             self = CastExpression.__new__(CastExpression)
 *         elif typ == CExpressionType_AND:             # <<<<<<<<<<<<<<
 *             self = AndExpression.__new__(AndExpression)
 *         elif typ == CExpressionType_OR:
 */
    break;
    case arrow::dataset::ExpressionType::type::OR:

    /* "pyarrow/_dataset.pyx":1147
 *             self = AndExpression.__new__(AndExpression)
 *         elif typ == CExpressionType_OR:
 *             self = OrExpression.__new__(OrExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_COMPARISON:
 *             self = ComparisonExpression.__new__(ComparisonExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_OrExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_OrExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1147, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1147, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1146
 *         elif typ == CExpressionType_AND:
 *             self = AndExpression.__new__(AndExpression)
 *         elif typ == CExpressionType_OR:             # <<<<<<<<<<<<<<
 *             self = OrExpression.__new__(OrExpression)
 *         elif typ == CExpressionType_COMPARISON:
 */
    break;
    case arrow::dataset::ExpressionType::type::COMPARISON:

    /* "pyarrow/_dataset.pyx":1149
 *             self = OrExpression.__new__(OrExpression)
 *         elif typ == CExpressionType_COMPARISON:
 *             self = ComparisonExpression.__new__(ComparisonExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_IS_VALID:
 *             self = IsValidExpression.__new__(IsValidExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_ComparisonExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_ComparisonExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1149, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1149, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1148
 *         elif typ == CExpressionType_OR:
 *             self = OrExpression.__new__(OrExpression)
 *         elif typ == CExpressionType_COMPARISON:             # <<<<<<<<<<<<<<
 *             self = ComparisonExpression.__new__(ComparisonExpression)
 *         elif typ == CExpressionType_IS_VALID:
 */
    break;
    case arrow::dataset::ExpressionType::type::IS_VALID:

    /* "pyarrow/_dataset.pyx":1151
 *             self = ComparisonExpression.__new__(ComparisonExpression)
 *         elif typ == CExpressionType_IS_VALID:
 *             self = IsValidExpression.__new__(IsValidExpression)             # <<<<<<<<<<<<<<
 *         elif typ == CExpressionType_IN:
 *             self = InExpression.__new__(InExpression)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_IsValidExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_IsValidExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1151, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1151, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1150
 *         elif typ == CExpressionType_COMPARISON:
 *             self = ComparisonExpression.__new__(ComparisonExpression)
 *         elif typ == CExpressionType_IS_VALID:             # <<<<<<<<<<<<<<
 *             self = IsValidExpression.__new__(IsValidExpression)
 *         elif typ == CExpressionType_IN:
 */
    break;
    case arrow::dataset::ExpressionType::type::IN:

    /* "pyarrow/_dataset.pyx":1153
 *             self = IsValidExpression.__new__(IsValidExpression)
 *         elif typ == CExpressionType_IN:
 *             self = InExpression.__new__(InExpression)             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError(typ)
 */
    __pyx_t_1 = ((PyObject *)__pyx_tp_new_7pyarrow_8_dataset_InExpression(((PyTypeObject *)__pyx_ptype_7pyarrow_8_dataset_InExpression), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1153, __pyx_L1_error)
    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
    if (!(likely(__Pyx_TypeTest(((PyObject *)__pyx_t_1), __pyx_ptype_7pyarrow_8_dataset_Expression)))) __PYX_ERR(0, 1153, __pyx_L1_error)
    __pyx_v_self = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pyarrow/_dataset.pyx":1152
 *         elif typ == CExpressionType_IS_VALID:
 *             self = IsValidExpression.__new__(IsValidExpression)
 *         elif typ == CExpressionType_IN:             # <<<<<<<<<<<<<<
 *             self = InExpression.__new__(InExpression)
 *         else:
 */
    break;
    default:

    /* "pyarrow/_dataset.pyx":1155
 *             self = InExpression.__new__(InExpression)
 *         else:
 *             raise TypeError(typ)             # <<<<<<<<<<<<<<
 * 
 *         self.init(sp)
 */
    __pyx_t_1 = __Pyx_PyInt_From_enum__arrow_3a__3a_dataset_3a__3a_ExpressionType_3a__3a_type(__pyx_v_typ); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1155, __pyx_L1_error)
    break;
  }

  /* "pyarrow/_dataset.pyx":1157
 *             raise TypeError(typ)
 * 
 *         self.init(sp)             # <<<<<<<<<<<<<<
 *         return self
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression *)__pyx_v_self->__pyx_vtab)->init(__pyx_v_self, __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":1158
 * 
 *         self.init(sp)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     cdef inline shared_ptr[CExpression] unwrap(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1132
 * 
 *     @staticmethod
 *     cdef wrap(const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         cdef Expression self
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.wrap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_self);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1160
 *         return self
 * 
 *     cdef inline shared_ptr[CExpression] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

static CYTHON_INLINE std::shared_ptr<arrow::dataset::Expression>  __pyx_f_7pyarrow_8_dataset_10Expression_unwrap(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self) {
  std::shared_ptr<arrow::dataset::Expression>  __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("unwrap", 0);

  /* "pyarrow/_dataset.pyx":1161
 * 
 *     cdef inline shared_ptr[CExpression] unwrap(self):
 *         return self.wrapped             # <<<<<<<<<<<<<<
 * 
 *     def equals(self, Expression other):
 */
  __pyx_r = __pyx_v_self->wrapped;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1160
 *         return self
 * 
 *     cdef inline shared_ptr[CExpression] unwrap(self):             # <<<<<<<<<<<<<<
 *         return self.wrapped
 * 
 */

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

/* "pyarrow/_dataset.pyx":1163
 *         return self.wrapped
 * 
 *     def equals(self, Expression other):             # <<<<<<<<<<<<<<
 *         return self.expr.Equals(other.unwrap())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_3equals(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_3equals(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_dataset_Expression, 1, "other", 0))) __PYX_ERR(0, 1163, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_2equals(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__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_dataset_10Expression_2equals(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("equals", 0);

  /* "pyarrow/_dataset.pyx":1164
 * 
 *     def equals(self, Expression other):
 *         return self.expr.Equals(other.unwrap())             # <<<<<<<<<<<<<<
 * 
 *     def __str__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->expr->Equals(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_other))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1164, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1163
 *         return self.wrapped
 * 
 *     def equals(self, Expression other):             # <<<<<<<<<<<<<<
 *         return self.expr.Equals(other.unwrap())
 * 
 */

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

/* "pyarrow/_dataset.pyx":1166
 *         return self.expr.Equals(other.unwrap())
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.expr.ToString())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_5__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_5__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_4__str__(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_4__str__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__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/_dataset.pyx":1167
 * 
 *     def __str__(self):
 *         return frombytes(self.expr.ToString())             # <<<<<<<<<<<<<<
 * 
 *     def validate(self, Schema schema not None):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->expr->ToString()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1167, __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, 1167, __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/_dataset.pyx":1166
 *         return self.expr.Equals(other.unwrap())
 * 
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.expr.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._dataset.Expression.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1169
 *         return frombytes(self.expr.ToString())
 * 
 *     def validate(self, Schema schema not None):             # <<<<<<<<<<<<<<
 *         """Validate this expression for execution against a schema.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_7validate(PyObject *__pyx_v_self, PyObject *__pyx_v_schema); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_10Expression_6validate[] = "Validate this expression for execution against a schema.\n\n        This will check that all reference fields are present (fields not in\n        the schema will be replaced with null) and all subexpressions are\n        executable. Returns the type to which this expression will evaluate.\n\n        Parameters\n        ----------\n        schema : Schema\n            Schema to execute the expression on.\n\n        Returns\n        -------\n        type : DataType\n        ";
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_7validate(PyObject *__pyx_v_self, PyObject *__pyx_v_schema) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_7pyarrow_3lib_Schema, 0, "schema", 0))) __PYX_ERR(0, 1169, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_6validate(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_3lib_Schema *)__pyx_v_schema));

  /* 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_dataset_10Expression_6validate(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, struct __pyx_obj_7pyarrow_3lib_Schema *__pyx_v_schema) {
  std::shared_ptr< arrow::Schema>  __pyx_v_sp_schema;
  arrow::Result<std::shared_ptr< arrow::DataType> >  __pyx_v_result;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::shared_ptr< arrow::DataType>  __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("validate", 0);

  /* "pyarrow/_dataset.pyx":1188
 *             shared_ptr[CSchema] sp_schema
 *             CResult[shared_ptr[CDataType]] result
 *         sp_schema = pyarrow_unwrap_schema(schema)             # <<<<<<<<<<<<<<
 *         result = self.expr.Validate(deref(sp_schema))
 *         return pyarrow_wrap_data_type(GetResultValue(result))
 */
  __pyx_v_sp_schema = __pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema(((PyObject *)__pyx_v_schema));

  /* "pyarrow/_dataset.pyx":1189
 *             CResult[shared_ptr[CDataType]] result
 *         sp_schema = pyarrow_unwrap_schema(schema)
 *         result = self.expr.Validate(deref(sp_schema))             # <<<<<<<<<<<<<<
 *         return pyarrow_wrap_data_type(GetResultValue(result))
 * 
 */
  __pyx_v_result = __pyx_v_self->expr->Validate((*__pyx_v_sp_schema));

  /* "pyarrow/_dataset.pyx":1190
 *         sp_schema = pyarrow_unwrap_schema(schema)
 *         result = self.expr.Validate(deref(sp_schema))
 *         return pyarrow_wrap_data_type(GetResultValue(result))             # <<<<<<<<<<<<<<
 * 
 *     def assume(self, Expression given):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = arrow::py::GetResultValue<std::shared_ptr< arrow::DataType> >(__pyx_v_result); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1190, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_7pyarrow_3lib_pyarrow_wrap_data_type(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1169
 *         return frombytes(self.expr.ToString())
 * 
 *     def validate(self, Schema schema not None):             # <<<<<<<<<<<<<<
 *         """Validate this expression for execution against a schema.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.validate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1192
 *         return pyarrow_wrap_data_type(GetResultValue(result))
 * 
 *     def assume(self, Expression given):             # <<<<<<<<<<<<<<
 *         """Simplify to an equivalent Expression given assumed constraints."""
 *         return Expression.wrap(self.expr.Assume(given.unwrap()))
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_9assume(PyObject *__pyx_v_self, PyObject *__pyx_v_given); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_10Expression_8assume[] = "Simplify to an equivalent Expression given assumed constraints.";
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_9assume(PyObject *__pyx_v_self, PyObject *__pyx_v_given) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("assume (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_given), __pyx_ptype_7pyarrow_8_dataset_Expression, 1, "given", 0))) __PYX_ERR(0, 1192, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_8assume(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_given));

  /* 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_dataset_10Expression_8assume(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_given) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("assume", 0);

  /* "pyarrow/_dataset.pyx":1194
 *     def assume(self, Expression given):
 *         """Simplify to an equivalent Expression given assumed constraints."""
 *         return Expression.wrap(self.expr.Assume(given.unwrap()))             # <<<<<<<<<<<<<<
 * 
 *     def __invert__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_10Expression_wrap(__pyx_v_self->expr->Assume(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_given))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1194, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1192
 *         return pyarrow_wrap_data_type(GetResultValue(result))
 * 
 *     def assume(self, Expression given):             # <<<<<<<<<<<<<<
 *         """Simplify to an equivalent Expression given assumed constraints."""
 *         return Expression.wrap(self.expr.Assume(given.unwrap()))
 */

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

/* "pyarrow/_dataset.pyx":1196
 *         return Expression.wrap(self.expr.Assume(given.unwrap()))
 * 
 *     def __invert__(self):             # <<<<<<<<<<<<<<
 *         return NotExpression(self)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_11__invert__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_11__invert__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__invert__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_10__invert__(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_10__invert__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("__invert__", 0);

  /* "pyarrow/_dataset.pyx":1197
 * 
 *     def __invert__(self):
 *         return NotExpression(self)             # <<<<<<<<<<<<<<
 * 
 *     def __richcmp__(self, other, int op):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_NotExpression), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1196
 *         return Expression.wrap(self.expr.Assume(given.unwrap()))
 * 
 *     def __invert__(self):             # <<<<<<<<<<<<<<
 *         return NotExpression(self)
 * 
 */

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

/* "pyarrow/_dataset.pyx":1199
 *         return NotExpression(self)
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         operator_mapping = {
 *             Py_EQ: CompareOperator.Equal,
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_13__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_13__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_12__richcmp__(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((int)__pyx_v_op));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_12__richcmp__(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_v_op) {
  PyObject *__pyx_v_operator_mapping = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  __Pyx_RefNannySetupContext("__richcmp__", 0);
  __Pyx_INCREF(__pyx_v_other);

  /* "pyarrow/_dataset.pyx":1201
 *     def __richcmp__(self, other, int op):
 *         operator_mapping = {
 *             Py_EQ: CompareOperator.Equal,             # <<<<<<<<<<<<<<
 *             Py_NE: CompareOperator.NotEqual,
 *             Py_GT: CompareOperator.Greater,
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(Py_EQ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Equal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_3) < 0) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pyarrow/_dataset.pyx":1202
 *         operator_mapping = {
 *             Py_EQ: CompareOperator.Equal,
 *             Py_NE: CompareOperator.NotEqual,             # <<<<<<<<<<<<<<
 *             Py_GT: CompareOperator.Greater,
 *             Py_GE: CompareOperator.GreaterEqual,
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(Py_NE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_NotEqual); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_2) < 0) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":1203
 *             Py_EQ: CompareOperator.Equal,
 *             Py_NE: CompareOperator.NotEqual,
 *             Py_GT: CompareOperator.Greater,             # <<<<<<<<<<<<<<
 *             Py_GE: CompareOperator.GreaterEqual,
 *             Py_LT: CompareOperator.Less,
 */
  __pyx_t_2 = __Pyx_PyInt_From_int(Py_GT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Greater); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_3) < 0) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pyarrow/_dataset.pyx":1204
 *             Py_NE: CompareOperator.NotEqual,
 *             Py_GT: CompareOperator.Greater,
 *             Py_GE: CompareOperator.GreaterEqual,             # <<<<<<<<<<<<<<
 *             Py_LT: CompareOperator.Less,
 *             Py_LE: CompareOperator.LessEqual
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(Py_GE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_GreaterEqual); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_2) < 0) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":1205
 *             Py_GT: CompareOperator.Greater,
 *             Py_GE: CompareOperator.GreaterEqual,
 *             Py_LT: CompareOperator.Less,             # <<<<<<<<<<<<<<
 *             Py_LE: CompareOperator.LessEqual
 *         }
 */
  __pyx_t_2 = __Pyx_PyInt_From_int(Py_LT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Less); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_2, __pyx_t_3) < 0) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pyarrow/_dataset.pyx":1206
 *             Py_GE: CompareOperator.GreaterEqual,
 *             Py_LT: CompareOperator.Less,
 *             Py_LE: CompareOperator.LessEqual             # <<<<<<<<<<<<<<
 *         }
 * 
 */
  __pyx_t_3 = __Pyx_PyInt_From_int(Py_LE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_LessEqual); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_1, __pyx_t_3, __pyx_t_2) < 0) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_operator_mapping = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":1209
 *         }
 * 
 *         if not isinstance(other, Expression):             # <<<<<<<<<<<<<<
 *             try:
 *                 other = ScalarExpression(other)
 */
  __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_7pyarrow_8_dataset_Expression); 
  __pyx_t_5 = ((!(__pyx_t_4 != 0)) != 0);
  if (__pyx_t_5) {

    /* "pyarrow/_dataset.pyx":1210
 * 
 *         if not isinstance(other, Expression):
 *             try:             # <<<<<<<<<<<<<<
 *                 other = ScalarExpression(other)
 *             except TypeError:
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);
      /*try:*/ {

        /* "pyarrow/_dataset.pyx":1211
 *         if not isinstance(other, Expression):
 *             try:
 *                 other = ScalarExpression(other)             # <<<<<<<<<<<<<<
 *             except TypeError:
 *                 return NotImplemented
 */
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_ScalarExpression), __pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1211, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_1);
        __pyx_t_1 = 0;

        /* "pyarrow/_dataset.pyx":1210
 * 
 *         if not isinstance(other, Expression):
 *             try:             # <<<<<<<<<<<<<<
 *                 other = ScalarExpression(other)
 *             except TypeError:
 */
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L9_try_end;
      __pyx_L4_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "pyarrow/_dataset.pyx":1212
 *             try:
 *                 other = ScalarExpression(other)
 *             except TypeError:             # <<<<<<<<<<<<<<
 *                 return NotImplemented
 * 
 */
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("pyarrow._dataset.Expression.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) __PYX_ERR(0, 1212, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_3);

        /* "pyarrow/_dataset.pyx":1213
 *                 other = ScalarExpression(other)
 *             except TypeError:
 *                 return NotImplemented             # <<<<<<<<<<<<<<
 * 
 *         return ComparisonExpression(operator_mapping[op], self, other)
 */
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(__pyx_builtin_NotImplemented);
        __pyx_r = __pyx_builtin_NotImplemented;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        goto __pyx_L7_except_return;
      }
      goto __pyx_L6_except_error;
      __pyx_L6_except_error:;

      /* "pyarrow/_dataset.pyx":1210
 * 
 *         if not isinstance(other, Expression):
 *             try:             # <<<<<<<<<<<<<<
 *                 other = ScalarExpression(other)
 *             except TypeError:
 */
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L7_except_return:;
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L0;
      __pyx_L9_try_end:;
    }

    /* "pyarrow/_dataset.pyx":1209
 *         }
 * 
 *         if not isinstance(other, Expression):             # <<<<<<<<<<<<<<
 *             try:
 *                 other = ScalarExpression(other)
 */
  }

  /* "pyarrow/_dataset.pyx":1215
 *                 return NotImplemented
 * 
 *         return ComparisonExpression(operator_mapping[op], self, other)             # <<<<<<<<<<<<<<
 * 
 *     def __and__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_op); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_operator_mapping, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self));
  __Pyx_INCREF(__pyx_v_other);
  __Pyx_GIVEREF(__pyx_v_other);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_other);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_ComparisonExpression), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1215, __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/_dataset.pyx":1199
 *         return NotExpression(self)
 * 
 *     def __richcmp__(self, other, int op):             # <<<<<<<<<<<<<<
 *         operator_mapping = {
 *             Py_EQ: CompareOperator.Equal,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_operator_mapping);
  __Pyx_XDECREF(__pyx_v_other);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1217
 *         return ComparisonExpression(operator_mapping[op], self, other)
 * 
 *     def __and__(self, other):             # <<<<<<<<<<<<<<
 *         return _binop(AndExpression, self, other)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_15__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_15__and__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__and__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_14__and__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_14__and__(PyObject *__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;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__and__", 0);

  /* "pyarrow/_dataset.pyx":1218
 * 
 *     def __and__(self, other):
 *         return _binop(AndExpression, self, other)             # <<<<<<<<<<<<<<
 * 
 *     def __or__(self, other):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_binop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, ((PyObject *)__pyx_ptype_7pyarrow_8_dataset_AndExpression), __pyx_v_self, __pyx_v_other};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, ((PyObject *)__pyx_ptype_7pyarrow_8_dataset_AndExpression), __pyx_v_self, __pyx_v_other};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_AndExpression));
    __Pyx_GIVEREF(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_AndExpression));
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_ptype_7pyarrow_8_dataset_AndExpression));
    __Pyx_INCREF(__pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_self);
    __Pyx_INCREF(__pyx_v_other);
    __Pyx_GIVEREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_other);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1217
 *         return ComparisonExpression(operator_mapping[op], self, other)
 * 
 *     def __and__(self, other):             # <<<<<<<<<<<<<<
 *         return _binop(AndExpression, self, other)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.__and__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1220
 *         return _binop(AndExpression, self, other)
 * 
 *     def __or__(self, other):             # <<<<<<<<<<<<<<
 *         return _binop(OrExpression, self, other)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_17__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_17__or__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__or__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_16__or__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_16__or__(PyObject *__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;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__or__", 0);

  /* "pyarrow/_dataset.pyx":1221
 * 
 *     def __or__(self, other):
 *         return _binop(OrExpression, self, other)             # <<<<<<<<<<<<<<
 * 
 *     def is_valid(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_binop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, ((PyObject *)__pyx_ptype_7pyarrow_8_dataset_OrExpression), __pyx_v_self, __pyx_v_other};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1221, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, ((PyObject *)__pyx_ptype_7pyarrow_8_dataset_OrExpression), __pyx_v_self, __pyx_v_other};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1221, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_OrExpression));
    __Pyx_GIVEREF(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_OrExpression));
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_ptype_7pyarrow_8_dataset_OrExpression));
    __Pyx_INCREF(__pyx_v_self);
    __Pyx_GIVEREF(__pyx_v_self);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_self);
    __Pyx_INCREF(__pyx_v_other);
    __Pyx_GIVEREF(__pyx_v_other);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_other);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1220
 *         return _binop(AndExpression, self, other)
 * 
 *     def __or__(self, other):             # <<<<<<<<<<<<<<
 *         return _binop(OrExpression, self, other)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.__or__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1223
 *         return _binop(OrExpression, self, other)
 * 
 *     def is_valid(self):             # <<<<<<<<<<<<<<
 *         """Checks whether the expression is not-null (valid)"""
 *         return IsValidExpression(self)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_19is_valid(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_10Expression_18is_valid[] = "Checks whether the expression is not-null (valid)";
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_19is_valid(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_valid (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_18is_valid(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_18is_valid(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("is_valid", 0);

  /* "pyarrow/_dataset.pyx":1225
 *     def is_valid(self):
 *         """Checks whether the expression is not-null (valid)"""
 *         return IsValidExpression(self)             # <<<<<<<<<<<<<<
 * 
 *     def cast(self, type, bint safe=True):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_IsValidExpression), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1223
 *         return _binop(OrExpression, self, other)
 * 
 *     def is_valid(self):             # <<<<<<<<<<<<<<
 *         """Checks whether the expression is not-null (valid)"""
 *         return IsValidExpression(self)
 */

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

/* "pyarrow/_dataset.pyx":1227
 *         return IsValidExpression(self)
 * 
 *     def cast(self, type, bint safe=True):             # <<<<<<<<<<<<<<
 *         """Explicitly change the expression's data type"""
 *         return CastExpression(self, to=ensure_type(type), safe=safe)
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_21cast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_10Expression_20cast[] = "Explicitly change the expression's data type";
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_21cast(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_type = 0;
  int __pyx_v_safe;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cast (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_type,&__pyx_n_s_safe,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_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_safe);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "cast") < 0)) __PYX_ERR(0, 1227, __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_type = values[0];
    if (values[1]) {
      __pyx_v_safe = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_safe == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1227, __pyx_L3_error)
    } else {
      __pyx_v_safe = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("cast", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1227, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.Expression.cast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_20cast(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_type, __pyx_v_safe);

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_20cast(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, PyObject *__pyx_v_type, int __pyx_v_safe) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("cast", 0);

  /* "pyarrow/_dataset.pyx":1229
 *     def cast(self, type, bint safe=True):
 *         """Explicitly change the expression's data type"""
 *         return CastExpression(self, to=ensure_type(type), safe=safe)             # <<<<<<<<<<<<<<
 * 
 *     def isin(self, values):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = ((PyObject *)__pyx_f_7pyarrow_3lib_ensure_type(__pyx_v_type, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_to, __pyx_t_3) < 0) __PYX_ERR(0, 1229, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_safe); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_safe, __pyx_t_3) < 0) __PYX_ERR(0, 1229, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_CastExpression), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __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/_dataset.pyx":1227
 *         return IsValidExpression(self)
 * 
 *     def cast(self, type, bint safe=True):             # <<<<<<<<<<<<<<
 *         """Explicitly change the expression's data type"""
 *         return CastExpression(self, to=ensure_type(type), safe=safe)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.cast", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1231
 *         return CastExpression(self, to=ensure_type(type), safe=safe)
 * 
 *     def isin(self, values):             # <<<<<<<<<<<<<<
 *         """Checks whether the expression is contained in values"""
 *         return InExpression(self, pa.array(values))
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_23isin(PyObject *__pyx_v_self, PyObject *__pyx_v_values); /*proto*/
static char __pyx_doc_7pyarrow_8_dataset_10Expression_22isin[] = "Checks whether the expression is contained in values";
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_23isin(PyObject *__pyx_v_self, PyObject *__pyx_v_values) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("isin (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_10Expression_22isin(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((PyObject *)__pyx_v_values));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_22isin(struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_self, PyObject *__pyx_v_values) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("isin", 0);

  /* "pyarrow/_dataset.pyx":1233
 *     def isin(self, values):
 *         """Checks whether the expression is contained in values"""
 *         return InExpression(self, pa.array(values))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pa); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __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_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_values) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_values);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7pyarrow_8_dataset_InExpression), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1231
 *         return CastExpression(self, to=ensure_type(type), safe=safe)
 * 
 *     def isin(self, values):             # <<<<<<<<<<<<<<
 *         """Checks whether the expression is contained in values"""
 *         return InExpression(self, pa.array(values))
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.isin", __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("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_25__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_25__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_dataset_10Expression_24__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_24__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Expression *__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("self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__38, 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("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.Expression.__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("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_27__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_10Expression_27__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_dataset_10Expression_26__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_10Expression_26__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_Expression *__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("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__39, 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("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1240
 *     cdef CUnaryExpression* unary
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.unary = <CUnaryExpression*> sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_15UnaryExpression_init(struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":1241
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.unary = <CUnaryExpression*> sp.get()
 * 
 */
  __pyx_f_7pyarrow_8_dataset_10Expression_init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":1242
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)
 *         self.unary = <CUnaryExpression*> sp.get()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->unary = ((arrow::dataset::UnaryExpression *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":1240
 *     cdef CUnaryExpression* unary
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.unary = <CUnaryExpression*> sp.get()
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_15UnaryExpression_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_15UnaryExpression_1__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_dataset_15UnaryExpression___reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_15UnaryExpression___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__40, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.UnaryExpression.__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_15UnaryExpression_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_15UnaryExpression_3__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_dataset_15UnaryExpression_2__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_15UnaryExpression_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__41, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1249
 *     cdef CBinaryExpression* binary
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.binary = <CBinaryExpression*> sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_16BinaryExpression_init(struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":1250
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.binary = <CBinaryExpression*> sp.get()
 * 
 */
  __pyx_f_7pyarrow_8_dataset_10Expression_init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":1251
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)
 *         self.binary = <CBinaryExpression*> sp.get()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_v_self->binary = ((arrow::dataset::BinaryExpression *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":1249
 *     cdef CBinaryExpression* binary
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.binary = <CBinaryExpression*> sp.get()
 */

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

/* "pyarrow/_dataset.pyx":1254
 * 
 *     @property
 *     def left_operand(self):             # <<<<<<<<<<<<<<
 *         return Expression.wrap(self.binary.left_operand())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_12left_operand_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_12left_operand_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_16BinaryExpression_12left_operand___get__(((struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *)__pyx_v_self));

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

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

  /* "pyarrow/_dataset.pyx":1255
 *     @property
 *     def left_operand(self):
 *         return Expression.wrap(self.binary.left_operand())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_10Expression_wrap(__pyx_v_self->binary->left_operand()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1254
 * 
 *     @property
 *     def left_operand(self):             # <<<<<<<<<<<<<<
 *         return Expression.wrap(self.binary.left_operand())
 * 
 */

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

/* "pyarrow/_dataset.pyx":1258
 * 
 *     @property
 *     def right_operand(self):             # <<<<<<<<<<<<<<
 *         return Expression.wrap(self.binary.right_operand())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_13right_operand_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_13right_operand_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_16BinaryExpression_13right_operand___get__(((struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *)__pyx_v_self));

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

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

  /* "pyarrow/_dataset.pyx":1259
 *     @property
 *     def right_operand(self):
 *         return Expression.wrap(self.binary.right_operand())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7pyarrow_8_dataset_10Expression_wrap(__pyx_v_self->binary->right_operand()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1258
 * 
 *     @property
 *     def right_operand(self):             # <<<<<<<<<<<<<<
 *         return Expression.wrap(self.binary.right_operand())
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.BinaryExpression.right_operand.__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_1__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_dataset_16BinaryExpression___reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16BinaryExpression___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__42, 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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.BinaryExpression.__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_3__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_dataset_16BinaryExpression_2__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16BinaryExpression_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__43, 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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1266
 *     cdef CScalarExpression* scalar
 * 
 *     def __init__(self, value):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CScalar] scalar
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_16ScalarExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_16ScalarExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_value = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_value,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_value)) != 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, "__init__") < 0)) __PYX_ERR(0, 1266, __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_value = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1266, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.ScalarExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_16ScalarExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *)__pyx_v_self), __pyx_v_value);

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

static int __pyx_pf_7pyarrow_8_dataset_16ScalarExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__pyx_v_self, PyObject *__pyx_v_value) {
  std::shared_ptr< arrow::Scalar>  __pyx_v_scalar;
  std::shared_ptr<arrow::dataset::ScalarExpression>  __pyx_v_expr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  bool __pyx_t_4;
  double __pyx_t_5;
  int64_t __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  std::string __pyx_t_9;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1271
 *             shared_ptr[CScalarExpression] expr
 * 
 *         if isinstance(value, bool):             # <<<<<<<<<<<<<<
 *             scalar = MakeScalar(<c_bool>value)
 *         elif isinstance(value, float):
 */
  __pyx_t_1 = ((PyObject*)&PyBool_Type);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_value, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pyarrow/_dataset.pyx":1272
 * 
 *         if isinstance(value, bool):
 *             scalar = MakeScalar(<c_bool>value)             # <<<<<<<<<<<<<<
 *         elif isinstance(value, float):
 *             scalar = MakeScalar(<double>value)
 */
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_4 == ((bool)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1272, __pyx_L1_error)
    __pyx_v_scalar = arrow::MakeScalar<bool>(((bool)__pyx_t_4));

    /* "pyarrow/_dataset.pyx":1271
 *             shared_ptr[CScalarExpression] expr
 * 
 *         if isinstance(value, bool):             # <<<<<<<<<<<<<<
 *             scalar = MakeScalar(<c_bool>value)
 *         elif isinstance(value, float):
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":1273
 *         if isinstance(value, bool):
 *             scalar = MakeScalar(<c_bool>value)
 *         elif isinstance(value, float):             # <<<<<<<<<<<<<<
 *             scalar = MakeScalar(<double>value)
 *         elif isinstance(value, int):
 */
  __pyx_t_3 = PyFloat_Check(__pyx_v_value); 
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "pyarrow/_dataset.pyx":1274
 *             scalar = MakeScalar(<c_bool>value)
 *         elif isinstance(value, float):
 *             scalar = MakeScalar(<double>value)             # <<<<<<<<<<<<<<
 *         elif isinstance(value, int):
 *             scalar = MakeScalar(<int64_t>value)
 */
    __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1274, __pyx_L1_error)
    __pyx_v_scalar = arrow::MakeScalar<double>(((double)__pyx_t_5));

    /* "pyarrow/_dataset.pyx":1273
 *         if isinstance(value, bool):
 *             scalar = MakeScalar(<c_bool>value)
 *         elif isinstance(value, float):             # <<<<<<<<<<<<<<
 *             scalar = MakeScalar(<double>value)
 *         elif isinstance(value, int):
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":1275
 *         elif isinstance(value, float):
 *             scalar = MakeScalar(<double>value)
 *         elif isinstance(value, int):             # <<<<<<<<<<<<<<
 *             scalar = MakeScalar(<int64_t>value)
 *         elif isinstance(value, six.string_types):
 */
  __pyx_t_2 = PyInt_Check(__pyx_v_value); 
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pyarrow/_dataset.pyx":1276
 *             scalar = MakeScalar(<double>value)
 *         elif isinstance(value, int):
 *             scalar = MakeScalar(<int64_t>value)             # <<<<<<<<<<<<<<
 *         elif isinstance(value, six.string_types):
 *             scalar = MakeStringScalar(tobytes(value))
 */
    __pyx_t_6 = __Pyx_PyInt_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_6 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1276, __pyx_L1_error)
    __pyx_v_scalar = arrow::MakeScalar<int64_t>(((int64_t)__pyx_t_6));

    /* "pyarrow/_dataset.pyx":1275
 *         elif isinstance(value, float):
 *             scalar = MakeScalar(<double>value)
 *         elif isinstance(value, int):             # <<<<<<<<<<<<<<
 *             scalar = MakeScalar(<int64_t>value)
 *         elif isinstance(value, six.string_types):
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":1277
 *         elif isinstance(value, int):
 *             scalar = MakeScalar(<int64_t>value)
 *         elif isinstance(value, six.string_types):             # <<<<<<<<<<<<<<
 *             scalar = MakeStringScalar(tobytes(value))
 *         else:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_six); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_string_types); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = PyObject_IsInstance(__pyx_v_value, __pyx_t_7); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1277, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (likely(__pyx_t_2)) {

    /* "pyarrow/_dataset.pyx":1278
 *             scalar = MakeScalar(<int64_t>value)
 *         elif isinstance(value, six.string_types):
 *             scalar = MakeStringScalar(tobytes(value))             # <<<<<<<<<<<<<<
 *         else:
 *             raise TypeError('Not yet supported scalar value: {}'.format(value))
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_7 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_value);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_9 = __pyx_convert_string_from_py_std__in_string(__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1278, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_scalar =  arrow::MakeScalar(__pyx_t_9);

    /* "pyarrow/_dataset.pyx":1277
 *         elif isinstance(value, int):
 *             scalar = MakeScalar(<int64_t>value)
 *         elif isinstance(value, six.string_types):             # <<<<<<<<<<<<<<
 *             scalar = MakeStringScalar(tobytes(value))
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pyarrow/_dataset.pyx":1280
 *             scalar = MakeStringScalar(tobytes(value))
 *         else:
 *             raise TypeError('Not yet supported scalar value: {}'.format(value))             # <<<<<<<<<<<<<<
 * 
 *         expr.reset(new CScalarExpression(scalar))
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Not_yet_supported_scalar_value, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_7 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_v_value) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_value);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 1280, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "pyarrow/_dataset.pyx":1282
 *             raise TypeError('Not yet supported scalar value: {}'.format(value))
 * 
 *         expr.reset(new CScalarExpression(scalar))             # <<<<<<<<<<<<<<
 *         self.init(<shared_ptr[CExpression]> expr)
 * 
 */
  __pyx_v_expr.reset(new arrow::dataset::ScalarExpression(__pyx_v_scalar));

  /* "pyarrow/_dataset.pyx":1283
 * 
 *         expr.reset(new CScalarExpression(scalar))
 *         self.init(<shared_ptr[CExpression]> expr)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_ScalarExpression *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((std::shared_ptr<arrow::dataset::Expression> )__pyx_v_expr));

  /* "pyarrow/_dataset.pyx":1266
 *     cdef CScalarExpression* scalar
 * 
 *     def __init__(self, value):             # <<<<<<<<<<<<<<
 *         cdef:
 *             shared_ptr[CScalar] scalar
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pyarrow._dataset.ScalarExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1285
 *         self.init(<shared_ptr[CExpression]> expr)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.scalar = <CScalarExpression*> sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_16ScalarExpression_init(struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":1286
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.scalar = <CScalarExpression*> sp.get()
 * 
 */
  __pyx_f_7pyarrow_8_dataset_10Expression_init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":1287
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)
 *         self.scalar = <CScalarExpression*> sp.get()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_v_self->scalar = ((arrow::dataset::ScalarExpression *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":1285
 *         self.init(<shared_ptr[CExpression]> expr)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.scalar = <CScalarExpression*> sp.get()
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16ScalarExpression_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16ScalarExpression_3__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_dataset_16ScalarExpression_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16ScalarExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__44, 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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.ScalarExpression.__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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_16ScalarExpression_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_16ScalarExpression_5__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_dataset_16ScalarExpression_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_16ScalarExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *__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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, 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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1294
 *     cdef CFieldExpression* scalar
 * 
 *     def __init__(self, name):             # <<<<<<<<<<<<<<
 *         cdef:
 *             c_string field_name = tobytes(name)
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_15FieldExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_15FieldExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name_2,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name_2)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1294, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_name = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1294, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.FieldExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_15FieldExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *)__pyx_v_self), __pyx_v_name);

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

static int __pyx_pf_7pyarrow_8_dataset_15FieldExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__pyx_v_self, PyObject *__pyx_v_name) {
  std::string __pyx_v_field_name;
  std::shared_ptr<arrow::dataset::Expression>  __pyx_v_expr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  std::string __pyx_t_4;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1296
 *     def __init__(self, name):
 *         cdef:
 *             c_string field_name = tobytes(name)             # <<<<<<<<<<<<<<
 *             shared_ptr[CExpression] expr
 *         expr.reset(new CFieldExpression(field_name))
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1296, __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_name) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_name);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1296, __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, 1296, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_field_name = __pyx_t_4;

  /* "pyarrow/_dataset.pyx":1298
 *             c_string field_name = tobytes(name)
 *             shared_ptr[CExpression] expr
 *         expr.reset(new CFieldExpression(field_name))             # <<<<<<<<<<<<<<
 *         self.init(expr)
 * 
 */
  __pyx_v_expr.reset(new arrow::dataset::FieldExpression(__pyx_v_field_name));

  /* "pyarrow/_dataset.pyx":1299
 *             shared_ptr[CExpression] expr
 *         expr.reset(new CFieldExpression(field_name))
 *         self.init(expr)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_FieldExpression *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_expr);

  /* "pyarrow/_dataset.pyx":1294
 *     cdef CFieldExpression* scalar
 * 
 *     def __init__(self, name):             # <<<<<<<<<<<<<<
 *         cdef:
 *             c_string field_name = tobytes(name)
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.FieldExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pyarrow/_dataset.pyx":1301
 *         self.init(expr)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.scalar = <CFieldExpression*> sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_15FieldExpression_init(struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":1302
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.scalar = <CFieldExpression*> sp.get()
 * 
 */
  __pyx_f_7pyarrow_8_dataset_10Expression_init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":1303
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         Expression.init(self, sp)
 *         self.scalar = <CFieldExpression*> sp.get()             # <<<<<<<<<<<<<<
 * 
 *     def name(self):
 */
  __pyx_v_self->scalar = ((arrow::dataset::FieldExpression *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":1301
 *         self.init(expr)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         Expression.init(self, sp)
 *         self.scalar = <CFieldExpression*> sp.get()
 */

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

/* "pyarrow/_dataset.pyx":1305
 *         self.scalar = <CFieldExpression*> sp.get()
 * 
 *     def name(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.scalar.name())
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_15FieldExpression_3name(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_15FieldExpression_3name(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("name (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_15FieldExpression_2name(((struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_15FieldExpression_2name(struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__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("name", 0);

  /* "pyarrow/_dataset.pyx":1306
 * 
 *     def name(self):
 *         return frombytes(self.scalar.name())             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frombytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_convert_PyBytes_string_to_py_std__in_string(__pyx_v_self->scalar->name()); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __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, 1306, __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/_dataset.pyx":1305
 *         self.scalar = <CFieldExpression*> sp.get()
 * 
 *     def name(self):             # <<<<<<<<<<<<<<
 *         return frombytes(self.scalar.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._dataset.FieldExpression.name", __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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_15FieldExpression_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_15FieldExpression_5__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_dataset_15FieldExpression_4__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_15FieldExpression_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__46, 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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.FieldExpression.__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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_15FieldExpression_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_15FieldExpression_7__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_dataset_15FieldExpression_6__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_15FieldExpression_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *__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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__47, 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("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1322
 *     cdef CComparisonExpression* comparison
 * 
 *     def __init__(self, CompareOperator op, Expression left not None,             # <<<<<<<<<<<<<<
 *                  Expression right not None):
 *         cdef shared_ptr[CComparisonExpression] expr
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  enum __pyx_t_7pyarrow_8_dataset_CompareOperator __pyx_v_op;
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left = 0;
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_op,&__pyx_n_s_left,&__pyx_n_s_right,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_op)) != 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_left)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 1322, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 1322, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1322, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_op = ((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)__Pyx_PyInt_As_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(values[0])); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1322, __pyx_L3_error)
    __pyx_v_left = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[1]);
    __pyx_v_right = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[2]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1322, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.ComparisonExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "left", 0))) __PYX_ERR(0, 1322, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "right", 0))) __PYX_ERR(0, 1323, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_20ComparisonExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *)__pyx_v_self), __pyx_v_op, __pyx_v_left, __pyx_v_right);

  /* 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_dataset_20ComparisonExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self, enum __pyx_t_7pyarrow_8_dataset_CompareOperator __pyx_v_op, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right) {
  std::shared_ptr<arrow::dataset::ComparisonExpression>  __pyx_v_expr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1325
 *                  Expression right not None):
 *         cdef shared_ptr[CComparisonExpression] expr
 *         expr.reset(             # <<<<<<<<<<<<<<
 *             new CComparisonExpression(
 *                 <CCompareOperator>op,
 */
  __pyx_v_expr.reset(new arrow::dataset::ComparisonExpression(((enum arrow::compute::CompareOperator)__pyx_v_op), __pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_left), __pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_right)));

  /* "pyarrow/_dataset.pyx":1332
 *             )
 *         )
 *         self.init(<shared_ptr[CExpression]> expr)             # <<<<<<<<<<<<<<
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_ComparisonExpression *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((std::shared_ptr<arrow::dataset::Expression> )__pyx_v_expr));

  /* "pyarrow/_dataset.pyx":1322
 *     cdef CComparisonExpression* comparison
 * 
 *     def __init__(self, CompareOperator op, Expression left not None,             # <<<<<<<<<<<<<<
 *                  Expression right not None):
 *         cdef shared_ptr[CComparisonExpression] expr
 */

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

/* "pyarrow/_dataset.pyx":1334
 *         self.init(<shared_ptr[CExpression]> expr)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         BinaryExpression.init(self, sp)
 *         self.comparison = <CComparisonExpression*> sp.get()
 */

static void __pyx_f_7pyarrow_8_dataset_20ComparisonExpression_init(struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self, std::shared_ptr<arrow::dataset::Expression>  const &__pyx_v_sp) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init", 0);

  /* "pyarrow/_dataset.pyx":1335
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         BinaryExpression.init(self, sp)             # <<<<<<<<<<<<<<
 *         self.comparison = <CComparisonExpression*> sp.get()
 * 
 */
  __pyx_f_7pyarrow_8_dataset_16BinaryExpression_init(((struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *)__pyx_v_self), __pyx_v_sp);

  /* "pyarrow/_dataset.pyx":1336
 *     cdef void init(self, const shared_ptr[CExpression]& sp):
 *         BinaryExpression.init(self, sp)
 *         self.comparison = <CComparisonExpression*> sp.get()             # <<<<<<<<<<<<<<
 * 
 *     def op(self):
 */
  __pyx_v_self->comparison = ((arrow::dataset::ComparisonExpression *)__pyx_v_sp.get());

  /* "pyarrow/_dataset.pyx":1334
 *         self.init(<shared_ptr[CExpression]> expr)
 * 
 *     cdef void init(self, const shared_ptr[CExpression]& sp):             # <<<<<<<<<<<<<<
 *         BinaryExpression.init(self, sp)
 *         self.comparison = <CComparisonExpression*> sp.get()
 */

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

/* "pyarrow/_dataset.pyx":1338
 *         self.comparison = <CComparisonExpression*> sp.get()
 * 
 *     def op(self):             # <<<<<<<<<<<<<<
 *         return <CompareOperator> self.comparison.op()
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_3op(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_3op(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("op (wrapper)", 0);
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_20ComparisonExpression_2op(((struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_20ComparisonExpression_2op(struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("op", 0);

  /* "pyarrow/_dataset.pyx":1339
 * 
 *     def op(self):
 *         return <CompareOperator> self.comparison.op()             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)__pyx_v_self->comparison->op())); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pyarrow/_dataset.pyx":1338
 *         self.comparison = <CComparisonExpression*> sp.get()
 * 
 *     def op(self):             # <<<<<<<<<<<<<<
 *         return <CompareOperator> self.comparison.op()
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.ComparisonExpression.op", __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("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_5__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_dataset_20ComparisonExpression_4__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_20ComparisonExpression_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__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("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__48, 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("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.ComparisonExpression.__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("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_7__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_dataset_20ComparisonExpression_6__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_20ComparisonExpression_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *__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("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__49, 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("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1344
 * cdef class IsValidExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CIsValidExpression] expr
 *         expr = make_shared[CIsValidExpression](operand.unwrap())
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_17IsValidExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_17IsValidExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_operand,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_operand)) != 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, "__init__") < 0)) __PYX_ERR(0, 1344, __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_operand = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1344, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.IsValidExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_operand), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "operand", 0))) __PYX_ERR(0, 1344, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_17IsValidExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *)__pyx_v_self), __pyx_v_operand);

  /* 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_dataset_17IsValidExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand) {
  std::shared_ptr<arrow::dataset::IsValidExpression>  __pyx_v_expr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  std::shared_ptr<arrow::dataset::IsValidExpression>  __pyx_t_1;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1346
 *     def __init__(self, Expression operand not None):
 *         cdef shared_ptr[CIsValidExpression] expr
 *         expr = make_shared[CIsValidExpression](operand.unwrap())             # <<<<<<<<<<<<<<
 *         self.init(<shared_ptr[CExpression]> expr)
 * 
 */
  try {
    __pyx_t_1 = std::make_shared<arrow::dataset::IsValidExpression>(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_operand));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1346, __pyx_L1_error)
  }
  __pyx_v_expr = __pyx_t_1;

  /* "pyarrow/_dataset.pyx":1347
 *         cdef shared_ptr[CIsValidExpression] expr
 *         expr = make_shared[CIsValidExpression](operand.unwrap())
 *         self.init(<shared_ptr[CExpression]> expr)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_IsValidExpression *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((std::shared_ptr<arrow::dataset::Expression> )__pyx_v_expr));

  /* "pyarrow/_dataset.pyx":1344
 * cdef class IsValidExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CIsValidExpression] expr
 *         expr = make_shared[CIsValidExpression](operand.unwrap())
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pyarrow._dataset.IsValidExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_17IsValidExpression_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_17IsValidExpression_3__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_dataset_17IsValidExpression_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_17IsValidExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__50, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.IsValidExpression.__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_17IsValidExpression_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_17IsValidExpression_5__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_dataset_17IsValidExpression_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_17IsValidExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__51, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1352
 * cdef class CastExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None, DataType to not None,             # <<<<<<<<<<<<<<
 *                  bint safe=True):
 *         # TODO(kszucs): safe is consistently used across pyarrow, but on long
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_14CastExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_14CastExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand = 0;
  struct __pyx_obj_7pyarrow_3lib_DataType *__pyx_v_to = 0;
  int __pyx_v_safe;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_operand,&__pyx_n_s_to,&__pyx_n_s_safe,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_operand)) != 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_to)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, 1); __PYX_ERR(0, 1352, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_safe);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1352, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_operand = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[0]);
    __pyx_v_to = ((struct __pyx_obj_7pyarrow_3lib_DataType *)values[1]);
    if (values[2]) {
      __pyx_v_safe = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_safe == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1353, __pyx_L3_error)
    } else {

      /* "pyarrow/_dataset.pyx":1353
 * 
 *     def __init__(self, Expression operand not None, DataType to not None,
 *                  bint safe=True):             # <<<<<<<<<<<<<<
 *         # TODO(kszucs): safe is consistently used across pyarrow, but on long
 *         #               term we should expose the CastOptions object
 */
      __pyx_v_safe = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1352, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.CastExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_operand), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "operand", 0))) __PYX_ERR(0, 1352, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_to), __pyx_ptype_7pyarrow_3lib_DataType, 0, "to", 0))) __PYX_ERR(0, 1352, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_14CastExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_CastExpression *)__pyx_v_self), __pyx_v_operand, __pyx_v_to, __pyx_v_safe);

  /* "pyarrow/_dataset.pyx":1352
 * cdef class CastExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None, DataType to not None,             # <<<<<<<<<<<<<<
 *                  bint safe=True):
 *         # TODO(kszucs): safe is consistently used across pyarrow, but on long
 */

  /* 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_dataset_14CastExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_CastExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand, struct __pyx_obj_7pyarrow_3lib_DataType *__pyx_v_to, int __pyx_v_safe) {
  struct __pyx_obj_7pyarrow_3lib_CastOptions *__pyx_v_options = 0;
  std::shared_ptr<arrow::dataset::Expression>  __pyx_v_expr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1359
 *             CastOptions options
 *             shared_ptr[CExpression] expr
 *         options = CastOptions.safe() if safe else CastOptions.unsafe()             # <<<<<<<<<<<<<<
 *         expr.reset(new CCastExpression(
 *             operand.unwrap(),
 */
  if ((__pyx_v_safe != 0)) {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7pyarrow_3lib_CastOptions), __pyx_n_s_safe); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_7pyarrow_3lib_CastOptions))))) __PYX_ERR(0, 1359, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7pyarrow_3lib_CastOptions), __pyx_n_s_unsafe); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_7pyarrow_3lib_CastOptions))))) __PYX_ERR(0, 1359, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_v_options = ((struct __pyx_obj_7pyarrow_3lib_CastOptions *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":1360
 *             shared_ptr[CExpression] expr
 *         options = CastOptions.safe() if safe else CastOptions.unsafe()
 *         expr.reset(new CCastExpression(             # <<<<<<<<<<<<<<
 *             operand.unwrap(),
 *             pyarrow_unwrap_data_type(to),
 */
  __pyx_v_expr.reset(new arrow::dataset::CastExpression(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_operand), __pyx_f_7pyarrow_3lib_pyarrow_unwrap_data_type(((PyObject *)__pyx_v_to)), ((struct __pyx_vtabstruct_7pyarrow_3lib_CastOptions *)__pyx_v_options->__pyx_vtab)->unwrap(__pyx_v_options)));

  /* "pyarrow/_dataset.pyx":1365
 *             options.unwrap()
 *         ))
 *         self.init(expr)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_CastExpression *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_expr);

  /* "pyarrow/_dataset.pyx":1352
 * cdef class CastExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None, DataType to not None,             # <<<<<<<<<<<<<<
 *                  bint safe=True):
 *         # TODO(kszucs): safe is consistently used across pyarrow, but on long
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pyarrow._dataset.CastExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_options);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14CastExpression_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14CastExpression_3__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_dataset_14CastExpression_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_CastExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_14CastExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_CastExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__52, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.CastExpression.__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_14CastExpression_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_14CastExpression_5__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_dataset_14CastExpression_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_CastExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_14CastExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_CastExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__53, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1370
 * cdef class InExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None, Array haystack not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CExpression] expr
 *         expr.reset(
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_12InExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_12InExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand = 0;
  struct __pyx_obj_7pyarrow_3lib_Array *__pyx_v_haystack = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_operand,&__pyx_n_s_haystack,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_operand)) != 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_haystack)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 1370, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1370, __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_operand = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[0]);
    __pyx_v_haystack = ((struct __pyx_obj_7pyarrow_3lib_Array *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1370, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.InExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_operand), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "operand", 0))) __PYX_ERR(0, 1370, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_haystack), __pyx_ptype_7pyarrow_3lib_Array, 0, "haystack", 0))) __PYX_ERR(0, 1370, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_12InExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_InExpression *)__pyx_v_self), __pyx_v_operand, __pyx_v_haystack);

  /* 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_dataset_12InExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_InExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand, struct __pyx_obj_7pyarrow_3lib_Array *__pyx_v_haystack) {
  std::shared_ptr<arrow::dataset::Expression>  __pyx_v_expr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1372
 *     def __init__(self, Expression operand not None, Array haystack not None):
 *         cdef shared_ptr[CExpression] expr
 *         expr.reset(             # <<<<<<<<<<<<<<
 *             new CInExpression(operand.unwrap(), pyarrow_unwrap_array(haystack))
 *         )
 */
  __pyx_v_expr.reset(new arrow::dataset::InExpression(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_operand), __pyx_f_7pyarrow_3lib_pyarrow_unwrap_array(((PyObject *)__pyx_v_haystack))));

  /* "pyarrow/_dataset.pyx":1375
 *             new CInExpression(operand.unwrap(), pyarrow_unwrap_array(haystack))
 *         )
 *         self.init(expr)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_InExpression *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), __pyx_v_expr);

  /* "pyarrow/_dataset.pyx":1370
 * cdef class InExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None, Array haystack not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CExpression] expr
 *         expr.reset(
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12InExpression_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12InExpression_3__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_dataset_12InExpression_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_InExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_12InExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_InExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__54, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.InExpression.__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12InExpression_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12InExpression_5__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_dataset_12InExpression_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_InExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_12InExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_InExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__55, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1380
 * cdef class NotExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CNotExpression] expr
 *         expr = CMakeNotExpression(operand.unwrap())
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_13NotExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_13NotExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_operand,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_operand)) != 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, "__init__") < 0)) __PYX_ERR(0, 1380, __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_operand = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1380, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pyarrow._dataset.NotExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_operand), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "operand", 0))) __PYX_ERR(0, 1380, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_13NotExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_NotExpression *)__pyx_v_self), __pyx_v_operand);

  /* 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_dataset_13NotExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_NotExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand) {
  std::shared_ptr<arrow::dataset::NotExpression>  __pyx_v_expr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1382
 *     def __init__(self, Expression operand not None):
 *         cdef shared_ptr[CNotExpression] expr
 *         expr = CMakeNotExpression(operand.unwrap())             # <<<<<<<<<<<<<<
 *         self.init(<shared_ptr[CExpression]> expr)
 * 
 */
  __pyx_v_expr = arrow::dataset::not_(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_operand));

  /* "pyarrow/_dataset.pyx":1383
 *         cdef shared_ptr[CNotExpression] expr
 *         expr = CMakeNotExpression(operand.unwrap())
 *         self.init(<shared_ptr[CExpression]> expr)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_NotExpression *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), ((std::shared_ptr<arrow::dataset::Expression> )__pyx_v_expr));

  /* "pyarrow/_dataset.pyx":1380
 * cdef class NotExpression(UnaryExpression):
 * 
 *     def __init__(self, Expression operand not None):             # <<<<<<<<<<<<<<
 *         cdef shared_ptr[CNotExpression] expr
 *         expr = CMakeNotExpression(operand.unwrap())
 */

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

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13NotExpression_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13NotExpression_3__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_dataset_13NotExpression_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_NotExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13NotExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_NotExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__56, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.NotExpression.__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13NotExpression_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13NotExpression_5__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_dataset_13NotExpression_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_NotExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13NotExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_NotExpression *__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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__57, 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("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1388
 * cdef class AndExpression(BinaryExpression):
 * 
 *     def __init__(self, Expression left not None, Expression right not None,             # <<<<<<<<<<<<<<
 *                  *additional_operands):
 *         cdef:
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_13AndExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_13AndExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left = 0;
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right = 0;
  PyObject *__pyx_v_additional_operands = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 2) {
    __pyx_v_additional_operands = PyTuple_GetSlice(__pyx_args, 2, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_additional_operands)) {
      __Pyx_RefNannyFinishContext();
      return -1;
    }
    __Pyx_GOTREF(__pyx_v_additional_operands);
  } else {
    __pyx_v_additional_operands = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left,&__pyx_n_s_right,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) {
        default:
        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;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left)) != 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_right)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 2, 1); __PYX_ERR(0, 1388, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 2) ? pos_args : 2;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__init__") < 0)) __PYX_ERR(0, 1388, __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_left = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[0]);
    __pyx_v_right = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1388, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_additional_operands); __pyx_v_additional_operands = 0;
  __Pyx_AddTraceback("pyarrow._dataset.AndExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "left", 0))) __PYX_ERR(0, 1388, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "right", 0))) __PYX_ERR(0, 1388, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_13AndExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_AndExpression *)__pyx_v_self), __pyx_v_left, __pyx_v_right, __pyx_v_additional_operands);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_additional_operands);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7pyarrow_8_dataset_13AndExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_AndExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right, PyObject *__pyx_v_additional_operands) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand = 0;
  std::vector<std::shared_ptr<arrow::dataset::Expression> >  __pyx_v_exprs;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1393
 *             Expression operand
 *             vector[shared_ptr[CExpression]] exprs
 *         exprs.push_back(left.unwrap())             # <<<<<<<<<<<<<<
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:
 */
  try {
    __pyx_v_exprs.push_back(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_left));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1393, __pyx_L1_error)
  }

  /* "pyarrow/_dataset.pyx":1394
 *             vector[shared_ptr[CExpression]] exprs
 *         exprs.push_back(left.unwrap())
 *         exprs.push_back(right.unwrap())             # <<<<<<<<<<<<<<
 *         for operand in additional_operands:
 *             exprs.push_back(operand.unwrap())
 */
  try {
    __pyx_v_exprs.push_back(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_right));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1394, __pyx_L1_error)
  }

  /* "pyarrow/_dataset.pyx":1395
 *         exprs.push_back(left.unwrap())
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:             # <<<<<<<<<<<<<<
 *             exprs.push_back(operand.unwrap())
 *         self.init(CMakeAndExpression(exprs))
 */
  __pyx_t_1 = __pyx_v_additional_operands; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) 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, 1395, __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, 1395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7pyarrow_8_dataset_Expression))))) __PYX_ERR(0, 1395, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_operand, ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "pyarrow/_dataset.pyx":1396
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:
 *             exprs.push_back(operand.unwrap())             # <<<<<<<<<<<<<<
 *         self.init(CMakeAndExpression(exprs))
 * 
 */
    try {
      __pyx_v_exprs.push_back(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_operand));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 1396, __pyx_L1_error)
    }

    /* "pyarrow/_dataset.pyx":1395
 *         exprs.push_back(left.unwrap())
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:             # <<<<<<<<<<<<<<
 *             exprs.push_back(operand.unwrap())
 *         self.init(CMakeAndExpression(exprs))
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":1397
 *         for operand in additional_operands:
 *             exprs.push_back(operand.unwrap())
 *         self.init(CMakeAndExpression(exprs))             # <<<<<<<<<<<<<<
 * 
 * 
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_AndExpression *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), arrow::dataset::and_(__pyx_v_exprs));

  /* "pyarrow/_dataset.pyx":1388
 * cdef class AndExpression(BinaryExpression):
 * 
 *     def __init__(self, Expression left not None, Expression right not None,             # <<<<<<<<<<<<<<
 *                  *additional_operands):
 *         cdef:
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.AndExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_operand);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13AndExpression_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13AndExpression_3__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_dataset_13AndExpression_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_AndExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13AndExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_AndExpression *__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__58, 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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.AndExpression.__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_13AndExpression_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_13AndExpression_5__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_dataset_13AndExpression_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_AndExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_13AndExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_AndExpression *__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__59, 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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "pyarrow/_dataset.pyx":1402
 * cdef class OrExpression(BinaryExpression):
 * 
 *     def __init__(self, Expression left not None, Expression right not None,             # <<<<<<<<<<<<<<
 *                  *additional_operands):
 *         cdef:
 */

/* Python wrapper */
static int __pyx_pw_7pyarrow_8_dataset_12OrExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7pyarrow_8_dataset_12OrExpression_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left = 0;
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right = 0;
  PyObject *__pyx_v_additional_operands = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  if (PyTuple_GET_SIZE(__pyx_args) > 2) {
    __pyx_v_additional_operands = PyTuple_GetSlice(__pyx_args, 2, PyTuple_GET_SIZE(__pyx_args));
    if (unlikely(!__pyx_v_additional_operands)) {
      __Pyx_RefNannyFinishContext();
      return -1;
    }
    __Pyx_GOTREF(__pyx_v_additional_operands);
  } else {
    __pyx_v_additional_operands = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
  }
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left,&__pyx_n_s_right,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) {
        default:
        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;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left)) != 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_right)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 2, 1); __PYX_ERR(0, 1402, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t used_pos_args = (pos_args < 2) ? pos_args : 2;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__init__") < 0)) __PYX_ERR(0, 1402, __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_left = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[0]);
    __pyx_v_right = ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1402, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_DECREF(__pyx_v_additional_operands); __pyx_v_additional_operands = 0;
  __Pyx_AddTraceback("pyarrow._dataset.OrExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "left", 0))) __PYX_ERR(0, 1402, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right), __pyx_ptype_7pyarrow_8_dataset_Expression, 0, "right", 0))) __PYX_ERR(0, 1402, __pyx_L1_error)
  __pyx_r = __pyx_pf_7pyarrow_8_dataset_12OrExpression___init__(((struct __pyx_obj_7pyarrow_8_dataset_OrExpression *)__pyx_v_self), __pyx_v_left, __pyx_v_right, __pyx_v_additional_operands);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_additional_operands);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_7pyarrow_8_dataset_12OrExpression___init__(struct __pyx_obj_7pyarrow_8_dataset_OrExpression *__pyx_v_self, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_left, struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_right, PyObject *__pyx_v_additional_operands) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *__pyx_v_operand = 0;
  std::vector<std::shared_ptr<arrow::dataset::Expression> >  __pyx_v_exprs;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pyarrow/_dataset.pyx":1407
 *             Expression operand
 *             vector[shared_ptr[CExpression]] exprs
 *         exprs.push_back(left.unwrap())             # <<<<<<<<<<<<<<
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:
 */
  try {
    __pyx_v_exprs.push_back(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_left));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1407, __pyx_L1_error)
  }

  /* "pyarrow/_dataset.pyx":1408
 *             vector[shared_ptr[CExpression]] exprs
 *         exprs.push_back(left.unwrap())
 *         exprs.push_back(right.unwrap())             # <<<<<<<<<<<<<<
 *         for operand in additional_operands:
 *             exprs.push_back(operand.unwrap())
 */
  try {
    __pyx_v_exprs.push_back(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_right));
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1408, __pyx_L1_error)
  }

  /* "pyarrow/_dataset.pyx":1409
 *         exprs.push_back(left.unwrap())
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:             # <<<<<<<<<<<<<<
 *             exprs.push_back(operand.unwrap())
 *         self.init(CMakeOrExpression(exprs))
 */
  __pyx_t_1 = __pyx_v_additional_operands; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) 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, 1409, __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, 1409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_7pyarrow_8_dataset_Expression))))) __PYX_ERR(0, 1409, __pyx_L1_error)
    __Pyx_XDECREF_SET(__pyx_v_operand, ((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "pyarrow/_dataset.pyx":1410
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:
 *             exprs.push_back(operand.unwrap())             # <<<<<<<<<<<<<<
 *         self.init(CMakeOrExpression(exprs))
 */
    try {
      __pyx_v_exprs.push_back(__pyx_f_7pyarrow_8_dataset_10Expression_unwrap(__pyx_v_operand));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 1410, __pyx_L1_error)
    }

    /* "pyarrow/_dataset.pyx":1409
 *         exprs.push_back(left.unwrap())
 *         exprs.push_back(right.unwrap())
 *         for operand in additional_operands:             # <<<<<<<<<<<<<<
 *             exprs.push_back(operand.unwrap())
 *         self.init(CMakeOrExpression(exprs))
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":1411
 *         for operand in additional_operands:
 *             exprs.push_back(operand.unwrap())
 *         self.init(CMakeOrExpression(exprs))             # <<<<<<<<<<<<<<
 */
  ((struct __pyx_vtabstruct_7pyarrow_8_dataset_OrExpression *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.init(((struct __pyx_obj_7pyarrow_8_dataset_Expression *)__pyx_v_self), arrow::dataset::or_(__pyx_v_exprs));

  /* "pyarrow/_dataset.pyx":1402
 * cdef class OrExpression(BinaryExpression):
 * 
 *     def __init__(self, Expression left not None, Expression right not None,             # <<<<<<<<<<<<<<
 *                  *additional_operands):
 *         cdef:
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pyarrow._dataset.OrExpression.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_operand);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12OrExpression_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12OrExpression_3__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_dataset_12OrExpression_2__reduce_cython__(((struct __pyx_obj_7pyarrow_8_dataset_OrExpression *)__pyx_v_self));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_12OrExpression_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_OrExpression *__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__60, 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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pyarrow._dataset.OrExpression.__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

/* Python wrapper */
static PyObject *__pyx_pw_7pyarrow_8_dataset_12OrExpression_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_7pyarrow_8_dataset_12OrExpression_5__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_dataset_12OrExpression_4__setstate_cython__(((struct __pyx_obj_7pyarrow_8_dataset_OrExpression *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

static PyObject *__pyx_pf_7pyarrow_8_dataset_12OrExpression_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7pyarrow_8_dataset_OrExpression *__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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__61, 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("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */

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

/* "cpython/datetime.pxd":104
 * # Datetime C API initialization function.
 * # You have to call it before any usage of DateTime CAPI functions.
 * cdef inline void import_datetime():             # <<<<<<<<<<<<<<
 *     PyDateTime_IMPORT
 * 
 */

static CYTHON_INLINE void __pyx_f_7cpython_8datetime_import_datetime(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("import_datetime", 0);

  /* "cpython/datetime.pxd":105
 * # You have to call it before any usage of DateTime CAPI functions.
 * cdef inline void import_datetime():
 *     PyDateTime_IMPORT             # <<<<<<<<<<<<<<
 * 
 * # Create date object using DateTime CAPI factory function.
 */
  (void)(PyDateTime_IMPORT);

  /* "cpython/datetime.pxd":104
 * # Datetime C API initialization function.
 * # You have to call it before any usage of DateTime CAPI functions.
 * cdef inline void import_datetime():             # <<<<<<<<<<<<<<
 *     PyDateTime_IMPORT
 * 
 */

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

/* "cpython/datetime.pxd":109
 * # Create date object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object date_new(int year, int month, int day):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Date_FromDate(year, month, day, PyDateTimeAPI.DateType)
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_date_new(int __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("date_new", 0);

  /* "cpython/datetime.pxd":110
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object date_new(int year, int month, int day):
 *     return PyDateTimeAPI.Date_FromDate(year, month, day, PyDateTimeAPI.DateType)             # <<<<<<<<<<<<<<
 * 
 * # Create time object using DateTime CAPI factory function
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTimeAPI->Date_FromDate(__pyx_v_year, __pyx_v_month, __pyx_v_day, PyDateTimeAPI->DateType); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cpython/datetime.pxd":109
 * # Create date object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object date_new(int year, int month, int day):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Date_FromDate(year, month, day, PyDateTimeAPI.DateType)
 * 
 */

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

/* "cpython/datetime.pxd":114
 * # Create time object using DateTime CAPI factory function
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object time_new(int hour, int minute, int second, int microsecond, object tz):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Time_FromTime(hour, minute, second, microsecond, tz, PyDateTimeAPI.TimeType)
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_time_new(int __pyx_v_hour, int __pyx_v_minute, int __pyx_v_second, int __pyx_v_microsecond, PyObject *__pyx_v_tz) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("time_new", 0);

  /* "cpython/datetime.pxd":115
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object time_new(int hour, int minute, int second, int microsecond, object tz):
 *     return PyDateTimeAPI.Time_FromTime(hour, minute, second, microsecond, tz, PyDateTimeAPI.TimeType)             # <<<<<<<<<<<<<<
 * 
 * # Create datetime object using DateTime CAPI factory function.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTimeAPI->Time_FromTime(__pyx_v_hour, __pyx_v_minute, __pyx_v_second, __pyx_v_microsecond, __pyx_v_tz, PyDateTimeAPI->TimeType); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cpython/datetime.pxd":114
 * # Create time object using DateTime CAPI factory function
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object time_new(int hour, int minute, int second, int microsecond, object tz):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Time_FromTime(hour, minute, second, microsecond, tz, PyDateTimeAPI.TimeType)
 * 
 */

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

/* "cpython/datetime.pxd":119
 * # Create datetime object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.DateTime_FromDateAndTime(year, month, day, hour, minute, second, microsecond, tz, PyDateTimeAPI.DateTimeType)
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_datetime_new(int __pyx_v_year, int __pyx_v_month, int __pyx_v_day, int __pyx_v_hour, int __pyx_v_minute, int __pyx_v_second, int __pyx_v_microsecond, PyObject *__pyx_v_tz) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("datetime_new", 0);

  /* "cpython/datetime.pxd":120
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz):
 *     return PyDateTimeAPI.DateTime_FromDateAndTime(year, month, day, hour, minute, second, microsecond, tz, PyDateTimeAPI.DateTimeType)             # <<<<<<<<<<<<<<
 * 
 * # Create timedelta object using DateTime CAPI factory function.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTimeAPI->DateTime_FromDateAndTime(__pyx_v_year, __pyx_v_month, __pyx_v_day, __pyx_v_hour, __pyx_v_minute, __pyx_v_second, __pyx_v_microsecond, __pyx_v_tz, PyDateTimeAPI->DateTimeType); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cpython/datetime.pxd":119
 * # Create datetime object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.DateTime_FromDateAndTime(year, month, day, hour, minute, second, microsecond, tz, PyDateTimeAPI.DateTimeType)
 * 
 */

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

/* "cpython/datetime.pxd":124
 * # Create timedelta object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object timedelta_new(int days, int seconds, int useconds):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Delta_FromDelta(days, seconds, useconds, 1, PyDateTimeAPI.DeltaType)
 * 
 */

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_timedelta_new(int __pyx_v_days, int __pyx_v_seconds, int __pyx_v_useconds) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("timedelta_new", 0);

  /* "cpython/datetime.pxd":125
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object timedelta_new(int days, int seconds, int useconds):
 *     return PyDateTimeAPI.Delta_FromDelta(days, seconds, useconds, 1, PyDateTimeAPI.DeltaType)             # <<<<<<<<<<<<<<
 * 
 * # More recognizable getters for date/time/datetime/timedelta.
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTimeAPI->Delta_FromDelta(__pyx_v_days, __pyx_v_seconds, __pyx_v_useconds, 1, PyDateTimeAPI->DeltaType); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cpython/datetime.pxd":124
 * # Create timedelta object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline object timedelta_new(int days, int seconds, int useconds):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Delta_FromDelta(days, seconds, useconds, 1, PyDateTimeAPI.DeltaType)
 * 
 */

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

/* "cpython/datetime.pxd":133
 * 
 * # Get tzinfo of time
 * cdef inline object time_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     if (<PyDateTime_Time*>o).hastzinfo:
 *         return <object>(<PyDateTime_Time*>o).tzinfo
 */

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_time_tzinfo(PyObject *__pyx_v_o) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("time_tzinfo", 0);

  /* "cpython/datetime.pxd":134
 * # Get tzinfo of time
 * cdef inline object time_tzinfo(object o):
 *     if (<PyDateTime_Time*>o).hastzinfo:             # <<<<<<<<<<<<<<
 *         return <object>(<PyDateTime_Time*>o).tzinfo
 *     else:
 */
  __pyx_t_1 = (((PyDateTime_Time *)__pyx_v_o)->hastzinfo != 0);
  if (__pyx_t_1) {

    /* "cpython/datetime.pxd":135
 * cdef inline object time_tzinfo(object o):
 *     if (<PyDateTime_Time*>o).hastzinfo:
 *         return <object>(<PyDateTime_Time*>o).tzinfo             # <<<<<<<<<<<<<<
 *     else:
 *         return None
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)((PyDateTime_Time *)__pyx_v_o)->tzinfo));
    __pyx_r = ((PyObject *)((PyDateTime_Time *)__pyx_v_o)->tzinfo);
    goto __pyx_L0;

    /* "cpython/datetime.pxd":134
 * # Get tzinfo of time
 * cdef inline object time_tzinfo(object o):
 *     if (<PyDateTime_Time*>o).hastzinfo:             # <<<<<<<<<<<<<<
 *         return <object>(<PyDateTime_Time*>o).tzinfo
 *     else:
 */
  }

  /* "cpython/datetime.pxd":137
 *         return <object>(<PyDateTime_Time*>o).tzinfo
 *     else:
 *         return None             # <<<<<<<<<<<<<<
 * 
 * # Get tzinfo of datetime
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "cpython/datetime.pxd":133
 * 
 * # Get tzinfo of time
 * cdef inline object time_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     if (<PyDateTime_Time*>o).hastzinfo:
 *         return <object>(<PyDateTime_Time*>o).tzinfo
 */

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

/* "cpython/datetime.pxd":140
 * 
 * # Get tzinfo of datetime
 * cdef inline object datetime_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     if (<PyDateTime_DateTime*>o).hastzinfo:
 *         return <object>(<PyDateTime_DateTime*>o).tzinfo
 */

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_datetime_tzinfo(PyObject *__pyx_v_o) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("datetime_tzinfo", 0);

  /* "cpython/datetime.pxd":141
 * # Get tzinfo of datetime
 * cdef inline object datetime_tzinfo(object o):
 *     if (<PyDateTime_DateTime*>o).hastzinfo:             # <<<<<<<<<<<<<<
 *         return <object>(<PyDateTime_DateTime*>o).tzinfo
 *     else:
 */
  __pyx_t_1 = (((PyDateTime_DateTime *)__pyx_v_o)->hastzinfo != 0);
  if (__pyx_t_1) {

    /* "cpython/datetime.pxd":142
 * cdef inline object datetime_tzinfo(object o):
 *     if (<PyDateTime_DateTime*>o).hastzinfo:
 *         return <object>(<PyDateTime_DateTime*>o).tzinfo             # <<<<<<<<<<<<<<
 *     else:
 *         return None
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)((PyDateTime_DateTime *)__pyx_v_o)->tzinfo));
    __pyx_r = ((PyObject *)((PyDateTime_DateTime *)__pyx_v_o)->tzinfo);
    goto __pyx_L0;

    /* "cpython/datetime.pxd":141
 * # Get tzinfo of datetime
 * cdef inline object datetime_tzinfo(object o):
 *     if (<PyDateTime_DateTime*>o).hastzinfo:             # <<<<<<<<<<<<<<
 *         return <object>(<PyDateTime_DateTime*>o).tzinfo
 *     else:
 */
  }

  /* "cpython/datetime.pxd":144
 *         return <object>(<PyDateTime_DateTime*>o).tzinfo
 *     else:
 *         return None             # <<<<<<<<<<<<<<
 * 
 * # Get year of date
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "cpython/datetime.pxd":140
 * 
 * # Get tzinfo of datetime
 * cdef inline object datetime_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     if (<PyDateTime_DateTime*>o).hastzinfo:
 *         return <object>(<PyDateTime_DateTime*>o).tzinfo
 */

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

/* "cpython/datetime.pxd":147
 * 
 * # Get year of date
 * cdef inline int date_year(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_date_year(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("date_year", 0);

  /* "cpython/datetime.pxd":148
 * # Get year of date
 * cdef inline int date_year(object o):
 *     return PyDateTime_GET_YEAR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get month of date
 */
  __pyx_r = PyDateTime_GET_YEAR(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":147
 * 
 * # Get year of date
 * cdef inline int date_year(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
 */

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

/* "cpython/datetime.pxd":151
 * 
 * # Get month of date
 * cdef inline int date_month(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_date_month(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("date_month", 0);

  /* "cpython/datetime.pxd":152
 * # Get month of date
 * cdef inline int date_month(object o):
 *     return PyDateTime_GET_MONTH(o)             # <<<<<<<<<<<<<<
 * 
 * # Get day of date
 */
  __pyx_r = PyDateTime_GET_MONTH(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":151
 * 
 * # Get month of date
 * cdef inline int date_month(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
 */

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

/* "cpython/datetime.pxd":155
 * 
 * # Get day of date
 * cdef inline int date_day(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_date_day(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("date_day", 0);

  /* "cpython/datetime.pxd":156
 * # Get day of date
 * cdef inline int date_day(object o):
 *     return PyDateTime_GET_DAY(o)             # <<<<<<<<<<<<<<
 * 
 * # Get year of datetime
 */
  __pyx_r = PyDateTime_GET_DAY(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":155
 * 
 * # Get day of date
 * cdef inline int date_day(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
 */

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

/* "cpython/datetime.pxd":159
 * 
 * # Get year of datetime
 * cdef inline int datetime_year(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_year(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("datetime_year", 0);

  /* "cpython/datetime.pxd":160
 * # Get year of datetime
 * cdef inline int datetime_year(object o):
 *     return PyDateTime_GET_YEAR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get month of datetime
 */
  __pyx_r = PyDateTime_GET_YEAR(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":159
 * 
 * # Get year of datetime
 * cdef inline int datetime_year(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
 */

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

/* "cpython/datetime.pxd":163
 * 
 * # Get month of datetime
 * cdef inline int datetime_month(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_month(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("datetime_month", 0);

  /* "cpython/datetime.pxd":164
 * # Get month of datetime
 * cdef inline int datetime_month(object o):
 *     return PyDateTime_GET_MONTH(o)             # <<<<<<<<<<<<<<
 * 
 * # Get day of datetime
 */
  __pyx_r = PyDateTime_GET_MONTH(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":163
 * 
 * # Get month of datetime
 * cdef inline int datetime_month(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
 */

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

/* "cpython/datetime.pxd":167
 * 
 * # Get day of datetime
 * cdef inline int datetime_day(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_day(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("datetime_day", 0);

  /* "cpython/datetime.pxd":168
 * # Get day of datetime
 * cdef inline int datetime_day(object o):
 *     return PyDateTime_GET_DAY(o)             # <<<<<<<<<<<<<<
 * 
 * # Get hour of time
 */
  __pyx_r = PyDateTime_GET_DAY(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":167
 * 
 * # Get day of datetime
 * cdef inline int datetime_day(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
 */

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

/* "cpython/datetime.pxd":171
 * 
 * # Get hour of time
 * cdef inline int time_hour(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_HOUR(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_hour(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("time_hour", 0);

  /* "cpython/datetime.pxd":172
 * # Get hour of time
 * cdef inline int time_hour(object o):
 *     return PyDateTime_TIME_GET_HOUR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get minute of time
 */
  __pyx_r = PyDateTime_TIME_GET_HOUR(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":171
 * 
 * # Get hour of time
 * cdef inline int time_hour(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_HOUR(o)
 * 
 */

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

/* "cpython/datetime.pxd":175
 * 
 * # Get minute of time
 * cdef inline int time_minute(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MINUTE(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_minute(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("time_minute", 0);

  /* "cpython/datetime.pxd":176
 * # Get minute of time
 * cdef inline int time_minute(object o):
 *     return PyDateTime_TIME_GET_MINUTE(o)             # <<<<<<<<<<<<<<
 * 
 * # Get second of time
 */
  __pyx_r = PyDateTime_TIME_GET_MINUTE(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":175
 * 
 * # Get minute of time
 * cdef inline int time_minute(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MINUTE(o)
 * 
 */

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

/* "cpython/datetime.pxd":179
 * 
 * # Get second of time
 * cdef inline int time_second(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_SECOND(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_second(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("time_second", 0);

  /* "cpython/datetime.pxd":180
 * # Get second of time
 * cdef inline int time_second(object o):
 *     return PyDateTime_TIME_GET_SECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get microsecond of time
 */
  __pyx_r = PyDateTime_TIME_GET_SECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":179
 * 
 * # Get second of time
 * cdef inline int time_second(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_SECOND(o)
 * 
 */

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

/* "cpython/datetime.pxd":183
 * 
 * # Get microsecond of time
 * cdef inline int time_microsecond(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MICROSECOND(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_microsecond(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("time_microsecond", 0);

  /* "cpython/datetime.pxd":184
 * # Get microsecond of time
 * cdef inline int time_microsecond(object o):
 *     return PyDateTime_TIME_GET_MICROSECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get hour of datetime
 */
  __pyx_r = PyDateTime_TIME_GET_MICROSECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":183
 * 
 * # Get microsecond of time
 * cdef inline int time_microsecond(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MICROSECOND(o)
 * 
 */

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

/* "cpython/datetime.pxd":187
 * 
 * # Get hour of datetime
 * cdef inline int datetime_hour(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_HOUR(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_hour(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("datetime_hour", 0);

  /* "cpython/datetime.pxd":188
 * # Get hour of datetime
 * cdef inline int datetime_hour(object o):
 *     return PyDateTime_DATE_GET_HOUR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get minute of datetime
 */
  __pyx_r = PyDateTime_DATE_GET_HOUR(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":187
 * 
 * # Get hour of datetime
 * cdef inline int datetime_hour(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_HOUR(o)
 * 
 */

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

/* "cpython/datetime.pxd":191
 * 
 * # Get minute of datetime
 * cdef inline int datetime_minute(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MINUTE(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_minute(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("datetime_minute", 0);

  /* "cpython/datetime.pxd":192
 * # Get minute of datetime
 * cdef inline int datetime_minute(object o):
 *     return PyDateTime_DATE_GET_MINUTE(o)             # <<<<<<<<<<<<<<
 * 
 * # Get second of datetime
 */
  __pyx_r = PyDateTime_DATE_GET_MINUTE(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":191
 * 
 * # Get minute of datetime
 * cdef inline int datetime_minute(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MINUTE(o)
 * 
 */

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

/* "cpython/datetime.pxd":195
 * 
 * # Get second of datetime
 * cdef inline int datetime_second(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_SECOND(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_second(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("datetime_second", 0);

  /* "cpython/datetime.pxd":196
 * # Get second of datetime
 * cdef inline int datetime_second(object o):
 *     return PyDateTime_DATE_GET_SECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get microsecond of datetime
 */
  __pyx_r = PyDateTime_DATE_GET_SECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":195
 * 
 * # Get second of datetime
 * cdef inline int datetime_second(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_SECOND(o)
 * 
 */

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

/* "cpython/datetime.pxd":199
 * 
 * # Get microsecond of datetime
 * cdef inline int datetime_microsecond(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MICROSECOND(o)
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_microsecond(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("datetime_microsecond", 0);

  /* "cpython/datetime.pxd":200
 * # Get microsecond of datetime
 * cdef inline int datetime_microsecond(object o):
 *     return PyDateTime_DATE_GET_MICROSECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get days of timedelta
 */
  __pyx_r = PyDateTime_DATE_GET_MICROSECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "cpython/datetime.pxd":199
 * 
 * # Get microsecond of datetime
 * cdef inline int datetime_microsecond(object o):             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MICROSECOND(o)
 * 
 */

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

/* "cpython/datetime.pxd":203
 * 
 * # Get days of timedelta
 * cdef inline int timedelta_days(object o):             # <<<<<<<<<<<<<<
 *     return (<PyDateTime_Delta*>o).days
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_timedelta_days(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("timedelta_days", 0);

  /* "cpython/datetime.pxd":204
 * # Get days of timedelta
 * cdef inline int timedelta_days(object o):
 *     return (<PyDateTime_Delta*>o).days             # <<<<<<<<<<<<<<
 * 
 * # Get seconds of timedelta
 */
  __pyx_r = ((PyDateTime_Delta *)__pyx_v_o)->days;
  goto __pyx_L0;

  /* "cpython/datetime.pxd":203
 * 
 * # Get days of timedelta
 * cdef inline int timedelta_days(object o):             # <<<<<<<<<<<<<<
 *     return (<PyDateTime_Delta*>o).days
 * 
 */

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

/* "cpython/datetime.pxd":207
 * 
 * # Get seconds of timedelta
 * cdef inline int timedelta_seconds(object o):             # <<<<<<<<<<<<<<
 *     return (<PyDateTime_Delta*>o).seconds
 * 
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_timedelta_seconds(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("timedelta_seconds", 0);

  /* "cpython/datetime.pxd":208
 * # Get seconds of timedelta
 * cdef inline int timedelta_seconds(object o):
 *     return (<PyDateTime_Delta*>o).seconds             # <<<<<<<<<<<<<<
 * 
 * # Get microseconds of timedelta
 */
  __pyx_r = ((PyDateTime_Delta *)__pyx_v_o)->seconds;
  goto __pyx_L0;

  /* "cpython/datetime.pxd":207
 * 
 * # Get seconds of timedelta
 * cdef inline int timedelta_seconds(object o):             # <<<<<<<<<<<<<<
 *     return (<PyDateTime_Delta*>o).seconds
 * 
 */

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

/* "cpython/datetime.pxd":211
 * 
 * # Get microseconds of timedelta
 * cdef inline int timedelta_microseconds(object o):             # <<<<<<<<<<<<<<
 *     return (<PyDateTime_Delta*>o).microseconds
 */

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_timedelta_microseconds(PyObject *__pyx_v_o) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("timedelta_microseconds", 0);

  /* "cpython/datetime.pxd":212
 * # Get microseconds of timedelta
 * cdef inline int timedelta_microseconds(object o):
 *     return (<PyDateTime_Delta*>o).microseconds             # <<<<<<<<<<<<<<
 */
  __pyx_r = ((PyDateTime_Delta *)__pyx_v_o)->microseconds;
  goto __pyx_L0;

  /* "cpython/datetime.pxd":211
 * 
 * # Get microseconds of timedelta
 * cdef inline int timedelta_microseconds(object o):             # <<<<<<<<<<<<<<
 *     return (<PyDateTime_Delta*>o).microseconds
 */

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

/* "pyarrow/includes/common.pxd":106
 *     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":108
 * 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":109
 *     # 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":110
 *     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":106
 *     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;
}

/* "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;
}

/* "vector.from_py":45
 * 
 * @cname("__pyx_convert_vector_from_py_std_3a__3a_string")
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_string(object o) except *:             # <<<<<<<<<<<<<<
 *     cdef vector[X] v
 *     for item in o:
 */

static std::vector<std::string>  __pyx_convert_vector_from_py_std_3a__3a_string(PyObject *__pyx_v_o) {
  std::vector<std::string>  __pyx_v_v;
  PyObject *__pyx_v_item = NULL;
  std::vector<std::string>  __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  std::string __pyx_t_5;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_from_py_std_3a__3a_string", 0);

  /* "vector.from_py":47
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_string(object o) except *:
 *     cdef vector[X] v
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 *     return v
 */
  if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) {
    __pyx_t_1 = __pyx_v_o; __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_o); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 47, __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(1, 47, __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(1, 47, __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(1, 47, __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(1, 47, __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(1, 47, __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(1, 47, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "vector.from_py":48
 *     cdef vector[X] v
 *     for item in o:
 *         v.push_back(<X>item)             # <<<<<<<<<<<<<<
 *     return v
 * 
 */
    __pyx_t_5 = __pyx_convert_string_from_py_std__in_string(__pyx_v_item); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 48, __pyx_L1_error)
    __pyx_v_v.push_back(((std::string)__pyx_t_5));

    /* "vector.from_py":47
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_string(object o) except *:
 *     cdef vector[X] v
 *     for item in o:             # <<<<<<<<<<<<<<
 *         v.push_back(<X>item)
 *     return v
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "vector.from_py":49
 *     for item in o:
 *         v.push_back(<X>item)
 *     return v             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;

  /* "vector.from_py":45
 * 
 * @cname("__pyx_convert_vector_from_py_std_3a__3a_string")
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_string(object o) except *:             # <<<<<<<<<<<<<<
 *     cdef vector[X] v
 *     for item in o:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("vector.from_py.__pyx_convert_vector_from_py_std_3a__3a_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "EnumBase":16
 * @cython.internal
 * cdef class __Pyx_EnumMeta(type):
 *     def __init__(cls, name, parents, dct):             # <<<<<<<<<<<<<<
 *         type.__init__(cls, name, parents, dct)
 *         cls.__members__ = __Pyx_OrderedDict()
 */

/* Python wrapper */
static int __pyx_pw_8EnumBase_14__Pyx_EnumMeta_1__init__(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_8EnumBase_14__Pyx_EnumMeta_1__init__(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_v_parents = 0;
  PyObject *__pyx_v_dct = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name_2,&__pyx_n_s_parents,&__pyx_n_s_dct,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name_2)) != 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_parents)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(1, 16, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dct)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(1, 16, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_name = values[0];
    __pyx_v_parents = values[1];
    __pyx_v_dct = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 16, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumMeta.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8EnumBase_14__Pyx_EnumMeta___init__(((struct __pyx_obj___Pyx_EnumMeta *)__pyx_v_cls), __pyx_v_name, __pyx_v_parents, __pyx_v_dct);

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

static int __pyx_pf_8EnumBase_14__Pyx_EnumMeta___init__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_parents, PyObject *__pyx_v_dct) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "EnumBase":17
 * cdef class __Pyx_EnumMeta(type):
 *     def __init__(cls, name, parents, dct):
 *         type.__init__(cls, name, parents, dct)             # <<<<<<<<<<<<<<
 *         cls.__members__ = __Pyx_OrderedDict()
 *     def __iter__(cls):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyType_Type)), __pyx_n_s_init); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  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 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_3, ((PyObject *)__pyx_v_cls), __pyx_v_name, __pyx_v_parents, __pyx_v_dct};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_3, ((PyObject *)__pyx_v_cls), __pyx_v_name, __pyx_v_parents, __pyx_v_dct};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_cls));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_cls));
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_cls));
    __Pyx_INCREF(__pyx_v_name);
    __Pyx_GIVEREF(__pyx_v_name);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_name);
    __Pyx_INCREF(__pyx_v_parents);
    __Pyx_GIVEREF(__pyx_v_parents);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_parents);
    __Pyx_INCREF(__pyx_v_dct);
    __Pyx_GIVEREF(__pyx_v_dct);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_dct);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "EnumBase":18
 *     def __init__(cls, name, parents, dct):
 *         type.__init__(cls, name, parents, dct)
 *         cls.__members__ = __Pyx_OrderedDict()             # <<<<<<<<<<<<<<
 *     def __iter__(cls):
 *         return iter(cls.__members__.values())
 */
  __Pyx_INCREF(__Pyx_OrderedDict);
  __pyx_t_2 = __Pyx_OrderedDict; __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_cls), __pyx_n_s_members, __pyx_t_1) < 0) __PYX_ERR(1, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "EnumBase":16
 * @cython.internal
 * cdef class __Pyx_EnumMeta(type):
 *     def __init__(cls, name, parents, dct):             # <<<<<<<<<<<<<<
 *         type.__init__(cls, name, parents, dct)
 *         cls.__members__ = __Pyx_OrderedDict()
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumMeta.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "EnumBase":19
 *         type.__init__(cls, name, parents, dct)
 *         cls.__members__ = __Pyx_OrderedDict()
 *     def __iter__(cls):             # <<<<<<<<<<<<<<
 *         return iter(cls.__members__.values())
 *     def __getitem__(cls, name):
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_3__iter__(PyObject *__pyx_v_cls); /*proto*/
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_3__iter__(PyObject *__pyx_v_cls) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8EnumBase_14__Pyx_EnumMeta_2__iter__(((struct __pyx_obj___Pyx_EnumMeta *)__pyx_v_cls));

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

static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumMeta_2__iter__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_cls) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "EnumBase":20
 *         cls.__members__ = __Pyx_OrderedDict()
 *     def __iter__(cls):
 *         return iter(cls.__members__.values())             # <<<<<<<<<<<<<<
 *     def __getitem__(cls, name):
 *         return cls.__members__[name]
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_n_s_members); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "EnumBase":19
 *         type.__init__(cls, name, parents, dct)
 *         cls.__members__ = __Pyx_OrderedDict()
 *     def __iter__(cls):             # <<<<<<<<<<<<<<
 *         return iter(cls.__members__.values())
 *     def __getitem__(cls, name):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumMeta.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "EnumBase":21
 *     def __iter__(cls):
 *         return iter(cls.__members__.values())
 *     def __getitem__(cls, name):             # <<<<<<<<<<<<<<
 *         return cls.__members__[name]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_5__getitem__(PyObject *__pyx_v_cls, PyObject *__pyx_v_name); /*proto*/
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_5__getitem__(PyObject *__pyx_v_cls, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8EnumBase_14__Pyx_EnumMeta_4__getitem__(((struct __pyx_obj___Pyx_EnumMeta *)__pyx_v_cls), ((PyObject *)__pyx_v_name));

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

static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumMeta_4__getitem__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_cls, PyObject *__pyx_v_name) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "EnumBase":22
 *         return iter(cls.__members__.values())
 *     def __getitem__(cls, name):
 *         return cls.__members__[name]             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_n_s_members); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "EnumBase":21
 *     def __iter__(cls):
 *         return iter(cls.__members__.values())
 *     def __getitem__(cls, name):             # <<<<<<<<<<<<<<
 *         return cls.__members__[name]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumMeta.__getitem__", __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):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_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_8EnumBase_14__Pyx_EnumMeta_6__reduce_cython__(((struct __pyx_obj___Pyx_EnumMeta *)__pyx_v_self));

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

static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumMeta_6__reduce_cython__(struct __pyx_obj___Pyx_EnumMeta *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = ()             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __Pyx_INCREF(__pyx_empty_tuple);
  __pyx_v_state = __pyx_empty_tuple;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v__dict = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":7
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_2 = (__pyx_v__dict != Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = False
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = ()
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = False             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, None), state
 */
  /*else*/ {
    __pyx_v_use_setstate = 0;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, None), state
 *     else:
 */
  __pyx_t_3 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_3) {

    /* "(tree fragment)":13
 *         use_setstate = False
 *     if use_setstate:
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle___Pyx_EnumMeta); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_222419149);
    __Pyx_GIVEREF(__pyx_int_222419149);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = False
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, None), state
 *     else:
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle___Pyx_EnumMeta__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle___Pyx_EnumMeta); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_222419149);
    __Pyx_GIVEREF(__pyx_int_222419149);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_222419149);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
    __pyx_t_5 = 0;
    __pyx_t_1 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumMeta.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle___Pyx_EnumMeta__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumMeta_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_8EnumBase_14__Pyx_EnumMeta_8__setstate_cython__(((struct __pyx_obj___Pyx_EnumMeta *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

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

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

  /* "(tree fragment)":17
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle___Pyx_EnumMeta__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_unpickle___Pyx_EnumMeta__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle___Pyx_EnumMeta, (type(self), 0xd41d8cd, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle___Pyx_EnumMeta__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumMeta.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "EnumBase":28
 * class __Pyx_EnumBase(int):
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):             # <<<<<<<<<<<<<<
 *         for v in cls:
 *             if v == value:
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumBase_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_8EnumBase_14__Pyx_EnumBase_1__new__ = {"__new__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_8EnumBase_14__Pyx_EnumBase_1__new__, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumBase_1__new__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_cls = 0;
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_name = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__new__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cls,&__pyx_n_s_value,&__pyx_n_s_name_2,0};
    PyObject* values[3] = {0,0,0};
    values[2] = ((PyObject *)((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_cls)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 3, 1); __PYX_ERR(1, 28, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name_2);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__new__") < 0)) __PYX_ERR(1, 28, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_cls = values[0];
    __pyx_v_value = values[1];
    __pyx_v_name = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__new__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 28, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumBase.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8EnumBase_14__Pyx_EnumBase___new__(__pyx_self, __pyx_v_cls, __pyx_v_value, __pyx_v_name);

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

static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumBase___new__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_cls, PyObject *__pyx_v_value, PyObject *__pyx_v_name) {
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_res = 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;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  __Pyx_RefNannySetupContext("__new__", 0);

  /* "EnumBase":29
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):
 *         for v in cls:             # <<<<<<<<<<<<<<
 *             if v == value:
 *                 return v
 */
  if (likely(PyList_CheckExact(__pyx_v_cls)) || PyTuple_CheckExact(__pyx_v_cls)) {
    __pyx_t_1 = __pyx_v_cls; __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_cls); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 29, __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(1, 29, __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(1, 29, __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(1, 29, __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(1, 29, __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(1, 29, __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(1, 29, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "EnumBase":30
 *     def __new__(cls, value, name=None):
 *         for v in cls:
 *             if v == value:             # <<<<<<<<<<<<<<
 *                 return v
 *         if name is None:
 */
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_v, __pyx_v_value, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 30, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(1, 30, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_5) {

      /* "EnumBase":31
 *         for v in cls:
 *             if v == value:
 *                 return v             # <<<<<<<<<<<<<<
 *         if name is None:
 *             raise ValueError("Unknown enum value: '%s'" % value)
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_v);
      __pyx_r = __pyx_v_v;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L0;

      /* "EnumBase":30
 *     def __new__(cls, value, name=None):
 *         for v in cls:
 *             if v == value:             # <<<<<<<<<<<<<<
 *                 return v
 *         if name is None:
 */
    }

    /* "EnumBase":29
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):
 *         for v in cls:             # <<<<<<<<<<<<<<
 *             if v == value:
 *                 return v
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "EnumBase":32
 *             if v == value:
 *                 return v
 *         if name is None:             # <<<<<<<<<<<<<<
 *             raise ValueError("Unknown enum value: '%s'" % value)
 *         res = int.__new__(cls, value)
 */
  __pyx_t_5 = (__pyx_v_name == Py_None);
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (unlikely(__pyx_t_6)) {

    /* "EnumBase":33
 *                 return v
 *         if name is None:
 *             raise ValueError("Unknown enum value: '%s'" % value)             # <<<<<<<<<<<<<<
 *         res = int.__new__(cls, value)
 *         res.name = name
 */
    __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Unknown_enum_value_s, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(1, 33, __pyx_L1_error)

    /* "EnumBase":32
 *             if v == value:
 *                 return v
 *         if name is None:             # <<<<<<<<<<<<<<
 *             raise ValueError("Unknown enum value: '%s'" % value)
 *         res = int.__new__(cls, value)
 */
  }

  /* "EnumBase":34
 *         if name is None:
 *             raise ValueError("Unknown enum value: '%s'" % value)
 *         res = int.__new__(cls, value)             # <<<<<<<<<<<<<<
 *         res.name = name
 *         setattr(cls, name, res)
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)(&PyInt_Type)), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_cls, __pyx_v_value};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 34, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_cls, __pyx_v_value};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 34, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 34, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_INCREF(__pyx_v_cls);
    __Pyx_GIVEREF(__pyx_v_cls);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_cls);
    __Pyx_INCREF(__pyx_v_value);
    __Pyx_GIVEREF(__pyx_v_value);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_value);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 34, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_res = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "EnumBase":35
 *             raise ValueError("Unknown enum value: '%s'" % value)
 *         res = int.__new__(cls, value)
 *         res.name = name             # <<<<<<<<<<<<<<
 *         setattr(cls, name, res)
 *         cls.__members__[name] = res
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_res, __pyx_n_s_name_2, __pyx_v_name) < 0) __PYX_ERR(1, 35, __pyx_L1_error)

  /* "EnumBase":36
 *         res = int.__new__(cls, value)
 *         res.name = name
 *         setattr(cls, name, res)             # <<<<<<<<<<<<<<
 *         cls.__members__[name] = res
 *         return res
 */
  __pyx_t_10 = PyObject_SetAttr(__pyx_v_cls, __pyx_v_name, __pyx_v_res); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 36, __pyx_L1_error)

  /* "EnumBase":37
 *         res.name = name
 *         setattr(cls, name, res)
 *         cls.__members__[name] = res             # <<<<<<<<<<<<<<
 *         return res
 *     def __repr__(self):
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_cls, __pyx_n_s_members); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (unlikely(PyObject_SetItem(__pyx_t_4, __pyx_v_name, __pyx_v_res) < 0)) __PYX_ERR(1, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "EnumBase":38
 *         setattr(cls, name, res)
 *         cls.__members__[name] = res
 *         return res             # <<<<<<<<<<<<<<
 *     def __repr__(self):
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_res);
  __pyx_r = __pyx_v_res;
  goto __pyx_L0;

  /* "EnumBase":28
 * class __Pyx_EnumBase(int):
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):             # <<<<<<<<<<<<<<
 *         for v in cls:
 *             if v == value:
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumBase.__new__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_res);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "EnumBase":39
 *         cls.__members__[name] = res
 *         return res
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumBase_3__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_8EnumBase_14__Pyx_EnumBase_3__repr__ = {"__repr__", (PyCFunction)__pyx_pw_8EnumBase_14__Pyx_EnumBase_3__repr__, METH_O, 0};
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumBase_3__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8EnumBase_14__Pyx_EnumBase_2__repr__(__pyx_self, ((PyObject *)__pyx_v_self));

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

static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumBase_2__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "EnumBase":40
 *         return res
 *     def __repr__(self):
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)             # <<<<<<<<<<<<<<
 *     def __str__(self):
 *         return "%s.%s" % (self.__class__.__name__, self.name)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_class); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "EnumBase":39
 *         cls.__members__[name] = res
 *         return res
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumBase.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "EnumBase":41
 *     def __repr__(self):
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return "%s.%s" % (self.__class__.__name__, self.name)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumBase_5__str__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
static PyMethodDef __pyx_mdef_8EnumBase_14__Pyx_EnumBase_5__str__ = {"__str__", (PyCFunction)__pyx_pw_8EnumBase_14__Pyx_EnumBase_5__str__, METH_O, 0};
static PyObject *__pyx_pw_8EnumBase_14__Pyx_EnumBase_5__str__(PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_8EnumBase_14__Pyx_EnumBase_4__str__(__pyx_self, ((PyObject *)__pyx_v_self));

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

static PyObject *__pyx_pf_8EnumBase_14__Pyx_EnumBase_4__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  __Pyx_RefNannySetupContext("__str__", 0);

  /* "EnumBase":42
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):
 *         return "%s.%s" % (self.__class__.__name__, self.name)             # <<<<<<<<<<<<<<
 * 
 * if PY_VERSION_HEX >= 0x03040000:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_class); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_s_s, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "EnumBase":41
 *     def __repr__(self):
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return "%s.%s" % (self.__class__.__name__, self.name)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("EnumBase.__Pyx_EnumBase.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle___Pyx_EnumMeta(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_8EnumBase_1__pyx_unpickle___Pyx_EnumMeta(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_8EnumBase_1__pyx_unpickle___Pyx_EnumMeta = {"__pyx_unpickle___Pyx_EnumMeta", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_8EnumBase_1__pyx_unpickle___Pyx_EnumMeta, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_8EnumBase_1__pyx_unpickle___Pyx_EnumMeta(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle___Pyx_EnumMeta (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 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_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle___Pyx_EnumMeta", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle___Pyx_EnumMeta", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle___Pyx_EnumMeta") < 0)) __PYX_ERR(1, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle___Pyx_EnumMeta", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("EnumBase.__pyx_unpickle___Pyx_EnumMeta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_8EnumBase___pyx_unpickle___Pyx_EnumMeta(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_8EnumBase___pyx_unpickle___Pyx_EnumMeta(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  __Pyx_RefNannySetupContext("__pyx_unpickle___Pyx_EnumMeta", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xd41d8cd) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = __Pyx_EnumMeta.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xd41d8cd:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = __Pyx_EnumMeta.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(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_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __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_3)) __PYX_ERR(1, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(1, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xd41d8cd:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = __Pyx_EnumMeta.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle___Pyx_EnumMeta__set_state(<__Pyx_EnumMeta> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype___Pyx_EnumMeta), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = __Pyx_EnumMeta.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle___Pyx_EnumMeta__set_state(<__Pyx_EnumMeta> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = __Pyx_EnumMeta.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle___Pyx_EnumMeta__set_state(<__Pyx_EnumMeta> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle___Pyx_EnumMeta__set_state(__Pyx_EnumMeta __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_unpickle___Pyx_EnumMeta__set_state(((struct __pyx_obj___Pyx_EnumMeta *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xd41d8cd = ())" % __pyx_checksum)
 *     __pyx_result = __Pyx_EnumMeta.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle___Pyx_EnumMeta__set_state(<__Pyx_EnumMeta> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle___Pyx_EnumMeta__set_state(<__Pyx_EnumMeta> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle___Pyx_EnumMeta__set_state(__Pyx_EnumMeta __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle___Pyx_EnumMeta(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* 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("EnumBase.__pyx_unpickle___Pyx_EnumMeta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle___Pyx_EnumMeta__set_state(<__Pyx_EnumMeta> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle___Pyx_EnumMeta__set_state(__Pyx_EnumMeta __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */

static PyObject *__pyx_unpickle___Pyx_EnumMeta__set_state(struct __pyx_obj___Pyx_EnumMeta *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  __Pyx_RefNannySetupContext("__pyx_unpickle___Pyx_EnumMeta__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle___Pyx_EnumMeta__set_state(__Pyx_EnumMeta __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(1, 12, __pyx_L1_error)
  }
  __pyx_t_2 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 12, __pyx_L1_error)
  __pyx_t_3 = ((__pyx_t_2 > 0) != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 12, __pyx_L1_error)
  __pyx_t_4 = (__pyx_t_3 != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "(tree fragment)":13
 * cdef __pyx_unpickle___Pyx_EnumMeta__set_state(__Pyx_EnumMeta __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])             # <<<<<<<<<<<<<<
 */
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 13, __pyx_L1_error)
    }
    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __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_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle___Pyx_EnumMeta__set_state(__Pyx_EnumMeta __pyx_result, tuple __pyx_state):
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle___Pyx_EnumMeta__set_state(<__Pyx_EnumMeta> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle___Pyx_EnumMeta__set_state(__Pyx_EnumMeta __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 0 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[0])
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("EnumBase.__pyx_unpickle___Pyx_EnumMeta__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static struct __pyx_vtabstruct_7pyarrow_8_dataset_FileFormat __pyx_vtable_7pyarrow_8_dataset_FileFormat;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileFormat(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_FileFormat *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_dataset_FileFormat *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_FileFormat;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::FileFormat> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_FileFormat(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_FileFormat *p = (struct __pyx_obj_7pyarrow_8_dataset_FileFormat *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_FileFormat[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10FileFormat_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10FileFormat_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_FileFormat = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.FileFormat", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_FileFormat), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_FileFormat, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  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_dataset_FileFormat, /*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*/
  __pyx_pw_7pyarrow_8_dataset_10FileFormat_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_FileFormat, /*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_dataset_ParquetFileFormat __pyx_vtable_7pyarrow_8_dataset_ParquetFileFormat;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ParquetFileFormat(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_FileFormat(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_FileFormat*)__pyx_vtabptr_7pyarrow_8_dataset_ParquetFileFormat;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_ParquetFileFormat[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_17ParquetFileFormat_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_17ParquetFileFormat_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_ParquetFileFormat = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.ParquetFileFormat", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_ParquetFileFormat), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_FileFormat, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  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_dataset_ParquetFileFormat, /*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*/
  __pyx_pw_7pyarrow_8_dataset_17ParquetFileFormat_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_ParquetFileFormat, /*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_dataset_Partitioning __pyx_vtable_7pyarrow_8_dataset_Partitioning;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Partitioning(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_Partitioning *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_dataset_Partitioning *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_Partitioning;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::Partitioning> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_Partitioning(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_Partitioning *p = (struct __pyx_obj_7pyarrow_8_dataset_Partitioning *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_12Partitioning_schema(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_12Partitioning_6schema_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_Partitioning[] = {
  {"parse", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_12Partitioning_3parse, METH_O, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_12Partitioning_5__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_12Partitioning_7__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_dataset_Partitioning[] = {
  {(char *)"schema", __pyx_getprop_7pyarrow_8_dataset_12Partitioning_schema, 0, (char *)"The arrow Schema attached to the partitioning.", 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_Partitioning = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.Partitioning", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_Partitioning), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Partitioning, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  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_dataset_Partitioning, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_dataset_Partitioning, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyarrow_8_dataset_12Partitioning_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_Partitioning, /*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_dataset_PartitioningFactory __pyx_vtable_7pyarrow_8_dataset_PartitioningFactory;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_PartitioningFactory(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *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_dataset_PartitioningFactory *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_PartitioningFactory;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::PartitioningFactory> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_PartitioningFactory(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *p = (struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_PartitioningFactory[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_19PartitioningFactory_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_19PartitioningFactory_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_PartitioningFactory = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.PartitioningFactory", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_PartitioningFactory, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  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_dataset_PartitioningFactory, /*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*/
  __pyx_pw_7pyarrow_8_dataset_19PartitioningFactory_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_PartitioningFactory, /*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_dataset_DirectoryPartitioning __pyx_vtable_7pyarrow_8_dataset_DirectoryPartitioning;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_DirectoryPartitioning(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Partitioning(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning*)__pyx_vtabptr_7pyarrow_8_dataset_DirectoryPartitioning;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_DirectoryPartitioning[] = {
  {"discover", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_3discover, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_21DirectoryPartitioning_2discover},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_5__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_7__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_DirectoryPartitioning = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.DirectoryPartitioning", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_DirectoryPartitioning), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Partitioning, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    A Partitioning based on a specified Schema.\n\n    The DirectoryPartitioning expects one segment in the file path for each\n    field in the schema (all fields are required to be present).\n    For example given schema<year:int16, month:int8> the path \"/2009/11\" would\n    be parsed to (\"year\"_ == 2009 and \"month\"_ == 11).\n\n    Parameters\n    ----------\n    schema : Schema\n        The schema that describes the partitions present in the file path.\n\n    Returns\n    -------\n    DirectoryPartitioning\n\n    Examples\n    --------\n    >>> from pyarrow.dataset import DirectoryPartitioning\n    >>> partition = DirectoryPartitioning(\n    ...     pa.schema([(\"year\", pa.int16()), (\"month\", pa.int8())]))\n    >>> print(partitioning.parse(\"/2009/11\"))\n    ((year == 2009:int16) and (month == 11:int8))\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_DirectoryPartitioning, /*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*/
  __pyx_pw_7pyarrow_8_dataset_21DirectoryPartitioning_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_DirectoryPartitioning, /*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_dataset_HivePartitioning __pyx_vtable_7pyarrow_8_dataset_HivePartitioning;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_HivePartitioning(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Partitioning(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Partitioning*)__pyx_vtabptr_7pyarrow_8_dataset_HivePartitioning;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_HivePartitioning[] = {
  {"discover", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_3discover, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_16HivePartitioning_2discover},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_5__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16HivePartitioning_7__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_HivePartitioning = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.HivePartitioning", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_HivePartitioning), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Partitioning, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    A Partitioning for \"/$key=$value/\" nested directories as found in\n    Apache Hive.\n\n    Multi-level, directory based partitioning scheme originating from\n    Apache Hive with all data files stored in the leaf directories. Data is\n    partitioned by static values of a particular column in the schema.\n    Partition keys are represented in the form $key=$value in directory names.\n    Field order is ignored, as are missing or unrecognized field names.\n\n    For example, given schema<year:int16, month:int8, day:int8>, a possible\n    path would be \"/year=2009/month=11/day=15\".\n\n    Parameters\n    ----------\n    schema : Schema\n        The schema that describes the partitions present in the file path.\n\n    Returns\n    -------\n    HivePartitioning\n\n    Examples\n    --------\n    >>> from pyarrow.dataset import HivePartitioning\n    >>> partitioning = HivePartitioning(\n    ...     pa.schema([(\"year\", pa.int16()), (\"month\", pa.int8())]))\n    >>> print(partitioning.parse(\"/year=2009/month=11\"))\n    ((year == 2009:int16) and (month == 11:int8))\n\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_HivePartitioning, /*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*/
  __pyx_pw_7pyarrow_8_dataset_16HivePartitioning_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_HivePartitioning, /*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_dataset_FileSystemFactoryOptions __pyx_vtable_7pyarrow_8_dataset_FileSystemFactoryOptions;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileSystemFactoryOptions(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *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_dataset_FileSystemFactoryOptions *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_FileSystemFactoryOptions;
  new((void*)&(p->options)) arrow::dataset::FileSystemFactoryOptions();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_FileSystemFactoryOptions(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *p = (struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *)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->options);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_1__get__(o);
}

static int __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_12partitioning_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning_factory(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_1__get__(o);
}

static int __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning_factory(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_20partitioning_factory_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partition_base_dir(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_1__get__(o);
}

static int __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partition_base_dir(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_18partition_base_dir_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_exclude_invalid_files(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_1__get__(o);
}

static int __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_exclude_invalid_files(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_21exclude_invalid_files_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_ignore_prefixes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_1__get__(o);
}

static int __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_ignore_prefixes(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_15ignore_prefixes_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_FileSystemFactoryOptions[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_dataset_FileSystemFactoryOptions[] = {
  {(char *)"partitioning", __pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning, __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning, (char *)"Partitioning to apply to discovered files.\n\n        NOTE: setting this property will overwrite partitioning_factory.\n        ", 0},
  {(char *)"partitioning_factory", __pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning_factory, __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partitioning_factory, (char *)"PartitioningFactory to apply to discovered files and\n        discover a Partitioning.\n\n        NOTE: setting this property will overwrite partitioning.\n        ", 0},
  {(char *)"partition_base_dir", __pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partition_base_dir, __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_partition_base_dir, (char *)"\n        Base directory to strip paths before applying the partitioning.\n        ", 0},
  {(char *)"exclude_invalid_files", __pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_exclude_invalid_files, __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_exclude_invalid_files, (char *)"Whether to exclude invalid files.", 0},
  {(char *)"ignore_prefixes", __pyx_getprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_ignore_prefixes, __pyx_setprop_7pyarrow_8_dataset_24FileSystemFactoryOptions_ignore_prefixes, (char *)"\n        List of prefixes. Files matching one of those prefixes will be\n        ignored by the discovery process.\n        ", 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.FileSystemFactoryOptions", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_FileSystemFactoryOptions, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Influences the discovery of filesystem paths.\n\n    Parameters\n    ----------\n    partition_base_dir : str, optional\n        For the purposes of applying the partitioning, paths will be\n        stripped of the partition_base_dir. Files not matching the\n        partition_base_dir prefix will be skipped for partitioning discovery.\n        The ignored files will still be part of the Source, but will not\n        have partition information.\n    exclude_invalid_files : bool, optional (default True)\n        If True, invalid files will be excluded (file format specific check).\n        This will incur IO for each files in a serial and single threaded\n        fashion. Disabling this feature will skip the IO, but unsupported\n        files may be present in the Source (resulting in an error at scan\n        time).\n    ignore_prefixes : list, optional\n        Files matching one of those prefixes will be ignored by the\n        discovery process. This is matched to the basename of a path.\n        By default this is ['.', '_'].\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_FileSystemFactoryOptions, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_dataset_FileSystemFactoryOptions, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyarrow_8_dataset_24FileSystemFactoryOptions_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_FileSystemFactoryOptions, /*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_dataset_SourceFactory __pyx_vtable_7pyarrow_8_dataset_SourceFactory;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_SourceFactory(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *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_dataset_SourceFactory *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_SourceFactory;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::SourceFactory> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_SourceFactory(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *p = (struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_13SourceFactory_root_partition(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_13SourceFactory_14root_partition_1__get__(o);
}

static int __pyx_setprop_7pyarrow_8_dataset_13SourceFactory_root_partition(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_7pyarrow_8_dataset_13SourceFactory_14root_partition_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_SourceFactory[] = {
  {"inspect_schemas", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13SourceFactory_3inspect_schemas, METH_NOARGS, 0},
  {"inspect", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13SourceFactory_5inspect, METH_NOARGS, __pyx_doc_7pyarrow_8_dataset_13SourceFactory_4inspect},
  {"finish", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_13SourceFactory_7finish, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_13SourceFactory_6finish},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13SourceFactory_9__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13SourceFactory_11__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_dataset_SourceFactory[] = {
  {(char *)"root_partition", __pyx_getprop_7pyarrow_8_dataset_13SourceFactory_root_partition, __pyx_setprop_7pyarrow_8_dataset_13SourceFactory_root_partition, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_SourceFactory = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.SourceFactory", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_SourceFactory, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    SourceFactory is used to create a Source, inspect the Schema\n    of the fragments contained in it, and declare a partitioning.\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_SourceFactory, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_dataset_SourceFactory, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyarrow_8_dataset_13SourceFactory_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_SourceFactory, /*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_dataset_FileSystemSourceFactory __pyx_vtable_7pyarrow_8_dataset_FileSystemSourceFactory;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileSystemSourceFactory(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_SourceFactory(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_SourceFactory*)__pyx_vtabptr_7pyarrow_8_dataset_FileSystemSourceFactory;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_FileSystemSourceFactory[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.FileSystemSourceFactory", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSourceFactory), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_SourceFactory, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Create a SourceFactory from a list of paths with schema inspection.\n\n    Parameters\n    ----------\n    filesystem : pyarrow.fs.FileSystem\n        Filesystem to discover.\n    paths_or_selector: pyarrow.fs.Selector or list of path-likes\n        Either a Selector object or a list of path-like objects.\n    format : FileFormat\n        Currently only ParquetFileFormat is supported.\n    options : FileSystemFactoryOptions, optional\n        Various flags influencing the discovery of filesystem paths.\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_FileSystemSourceFactory, /*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*/
  __pyx_pw_7pyarrow_8_dataset_23FileSystemSourceFactory_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_FileSystemSourceFactory, /*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_dataset_Source __pyx_vtable_7pyarrow_8_dataset_Source;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Source(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_Source *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_dataset_Source *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_Source;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::Source> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_Source(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_Source *p = (struct __pyx_obj_7pyarrow_8_dataset_Source *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_6Source_schema(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_6Source_6schema_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_6Source_partition_expression(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_6Source_20partition_expression_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_Source[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_6Source_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_6Source_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_dataset_Source[] = {
  {(char *)"schema", __pyx_getprop_7pyarrow_8_dataset_6Source_schema, 0, (char *)"\n        Schema of all RecordBatches contained in this DataSource.\n        ", 0},
  {(char *)"partition_expression", __pyx_getprop_7pyarrow_8_dataset_6Source_partition_expression, 0, (char *)"\n        An Expression which evaluates to true for all data viewed by this\n        Source.\n        ", 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_Source = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.Source", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_Source), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Source, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "Basic component of a Dataset which yields zero or more fragments.  ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_Source, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_dataset_Source, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyarrow_8_dataset_6Source_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_Source, /*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_dataset_TreeSource __pyx_vtable_7pyarrow_8_dataset_TreeSource;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_TreeSource(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_TreeSource *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Source(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_TreeSource *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Source*)__pyx_vtabptr_7pyarrow_8_dataset_TreeSource;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_TreeSource[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10TreeSource_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10TreeSource_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_TreeSource = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.TreeSource", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_TreeSource), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Source, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "A Source created from other source objects", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_TreeSource, /*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*/
  __pyx_pw_7pyarrow_8_dataset_10TreeSource_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_TreeSource, /*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_dataset_FileSystemSource __pyx_vtable_7pyarrow_8_dataset_FileSystemSource;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FileSystemSource(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Source(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Source*)__pyx_vtabptr_7pyarrow_8_dataset_FileSystemSource;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_FileSystemSource[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16FileSystemSource_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16FileSystemSource_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_FileSystemSource = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.FileSystemSource", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_FileSystemSource), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Source, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "A Source created from a set of files on a particular filesystem", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_FileSystemSource, /*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*/
  __pyx_pw_7pyarrow_8_dataset_16FileSystemSource_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_FileSystemSource, /*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_dataset_DatasetFactory __pyx_vtable_7pyarrow_8_dataset_DatasetFactory;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_DatasetFactory(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *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_dataset_DatasetFactory *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_DatasetFactory;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::DatasetFactory> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_DatasetFactory(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *p = (struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_14DatasetFactory_sources(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_14DatasetFactory_7sources_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_DatasetFactory[] = {
  {"inspect_schemas", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_3inspect_schemas, METH_NOARGS, 0},
  {"inspect", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_5inspect, METH_NOARGS, 0},
  {"finish", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_7finish, METH_VARARGS|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_9__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_14DatasetFactory_11__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_dataset_DatasetFactory[] = {
  {(char *)"sources", __pyx_getprop_7pyarrow_8_dataset_14DatasetFactory_sources, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_DatasetFactory = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.DatasetFactory", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_DatasetFactory, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Provides a way to inspect/discover a Dataset's expected schema before\n    materializing the Dataset and underlying Sources.\n\n    Parameters\n    ----------\n    factories : list of SourceFactory\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_DatasetFactory, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_dataset_DatasetFactory, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyarrow_8_dataset_14DatasetFactory_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_DatasetFactory, /*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_dataset_Dataset __pyx_vtable_7pyarrow_8_dataset_Dataset;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Dataset(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_Dataset *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_dataset_Dataset *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_Dataset;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::Dataset> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_Dataset(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_Dataset *p = (struct __pyx_obj_7pyarrow_8_dataset_Dataset *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_7Dataset_sources(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_7Dataset_7sources_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_7Dataset_schema(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_7Dataset_6schema_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_Dataset[] = {
  {"scan", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_7Dataset_3scan, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_7Dataset_2scan},
  {"to_batches", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_7Dataset_5to_batches, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_7Dataset_4to_batches},
  {"to_table", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_7Dataset_8to_table, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_7Dataset_7to_table},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_7Dataset_10__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_7Dataset_12__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_dataset_Dataset[] = {
  {(char *)"sources", __pyx_getprop_7pyarrow_8_dataset_7Dataset_sources, 0, (char *)"List of the data sources", 0},
  {(char *)"schema", __pyx_getprop_7pyarrow_8_dataset_7Dataset_schema, 0, (char *)"The common schema of the full Dataset", 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_Dataset = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.Dataset", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_Dataset), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Dataset, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "\n    Collection of data fragments coming from possibly multiple sources.\n\n    Arrow Datasets allow you to query against data that has been split across\n    multiple files. This sharding of data may indicate partitioning, which\n    can accelerate queries that only touch some partitions (files).\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_Dataset, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_dataset_Dataset, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_7pyarrow_8_dataset_7Dataset_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_Dataset, /*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_dataset_ScanTask __pyx_vtable_7pyarrow_8_dataset_ScanTask;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ScanTask(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_ScanTask *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_dataset_ScanTask *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_ScanTask;
  new((void*)&(p->wrapped)) std::shared_ptr< arrow::dataset::ScanTask> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_ScanTask(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_ScanTask *p = (struct __pyx_obj_7pyarrow_8_dataset_ScanTask *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_ScanTask[] = {
  {"execute", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_8ScanTask_3execute, METH_NOARGS, __pyx_doc_7pyarrow_8_dataset_8ScanTask_2execute},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_8ScanTask_6__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_8ScanTask_8__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_ScanTask = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.ScanTask", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_ScanTask), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_ScanTask, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "Read record batches from a range of a single data fragment.\n\n    A ScanTask is meant to be a unit of work to be dispatched.\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_ScanTask, /*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*/
  __pyx_pw_7pyarrow_8_dataset_8ScanTask_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_ScanTask, /*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_dataset_Scanner __pyx_vtable_7pyarrow_8_dataset_Scanner;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Scanner(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_Scanner *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_dataset_Scanner *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_Scanner;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::Scanner> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_Scanner(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_Scanner *p = (struct __pyx_obj_7pyarrow_8_dataset_Scanner *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_Scanner[] = {
  {"scan", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_7Scanner_3scan, METH_NOARGS, __pyx_doc_7pyarrow_8_dataset_7Scanner_2scan},
  {"to_table", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_7Scanner_6to_table, METH_NOARGS, __pyx_doc_7pyarrow_8_dataset_7Scanner_5to_table},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_7Scanner_8__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_7Scanner_10__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_Scanner = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.Scanner", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_Scanner), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Scanner, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  "A materialized scan operation with context and options bound.\n\n    A scanner is the class that glues the scan tasks, data fragments and data\n    sources together.\n\n    Parameters\n    ----------\n    dataset : Dataset\n        Dataset to scan.\n    columns : list of str, default None\n        List of columns to project. Order and duplicates will be preserved.\n        The columns will be passed down to Sources and corresponding data\n        fragments to avoid loading, copying, and deserializing columns\n        that will not be required further down the compute chain.\n        By default all of the available columns are projected. Raises\n        an exception if any of the referenced column names does not exist\n        in the dataset's Schema.\n    filter : Expression, default None\n        Scan will return only the rows matching the filter.\n        If possible the predicate will be pushed down to exploit the\n        partition information or internal metadata found in the data\n        source, e.g. Parquet statistics. Otherwise filters the loaded\n        RecordBatches before yielding them.\n    use_threads : boolean, default True\n        If enabled, then maximum paralellism will be used determined by\n        the number of available CPU cores.\n    memory_pool : MemoryPool, default None\n        For memory allocations, if required. If not specified, uses the\n        default pool.\n    ", /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_Scanner, /*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*/
  __pyx_pw_7pyarrow_8_dataset_7Scanner_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_Scanner, /*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_dataset_Expression __pyx_vtable_7pyarrow_8_dataset_Expression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_Expression(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *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_dataset_Expression *)o);
  p->__pyx_vtab = __pyx_vtabptr_7pyarrow_8_dataset_Expression;
  new((void*)&(p->wrapped)) std::shared_ptr<arrow::dataset::Expression> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset_Expression(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset_Expression *p = (struct __pyx_obj_7pyarrow_8_dataset_Expression *)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->wrapped);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_Expression[] = {
  {"equals", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10Expression_3equals, METH_O, 0},
  {"validate", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10Expression_7validate, METH_O, __pyx_doc_7pyarrow_8_dataset_10Expression_6validate},
  {"assume", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10Expression_9assume, METH_O, __pyx_doc_7pyarrow_8_dataset_10Expression_8assume},
  {"is_valid", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10Expression_19is_valid, METH_NOARGS, __pyx_doc_7pyarrow_8_dataset_10Expression_18is_valid},
  {"cast", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7pyarrow_8_dataset_10Expression_21cast, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7pyarrow_8_dataset_10Expression_20cast},
  {"isin", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10Expression_23isin, METH_O, __pyx_doc_7pyarrow_8_dataset_10Expression_22isin},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10Expression_25__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_10Expression_27__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyNumberMethods __pyx_tp_as_number_Expression = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_divide*/
  #endif
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  0, /*nb_nonzero*/
  __pyx_pw_7pyarrow_8_dataset_10Expression_11__invert__, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  __pyx_pw_7pyarrow_8_dataset_10Expression_15__and__, /*nb_and*/
  0, /*nb_xor*/
  __pyx_pw_7pyarrow_8_dataset_10Expression_17__or__, /*nb_or*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_coerce*/
  #endif
  0, /*nb_int*/
  #if PY_MAJOR_VERSION < 3
  0, /*nb_long*/
  #else
  0, /*reserved*/
  #endif
  0, /*nb_float*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_oct*/
  #endif
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_hex*/
  #endif
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
  0, /*nb_inplace_divide*/
  #endif
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_matrix_multiply*/
  #endif
  #if PY_VERSION_HEX >= 0x03050000
  0, /*nb_inplace_matrix_multiply*/
  #endif
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_Expression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.Expression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_Expression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  &__pyx_tp_as_number_Expression, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__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*/
  __pyx_pw_7pyarrow_8_dataset_10Expression_13__richcmp__, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7pyarrow_8_dataset_Expression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_10Expression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_Expression, /*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_dataset_UnaryExpression __pyx_vtable_7pyarrow_8_dataset_UnaryExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_UnaryExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Expression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_UnaryExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_15UnaryExpression_1__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_15UnaryExpression_3__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_UnaryExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.UnaryExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_UnaryExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_UnaryExpression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_1__init__, /*tp_init*/
  #else
  0, /*tp_init*/
  #endif
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_UnaryExpression, /*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_dataset_BinaryExpression __pyx_vtable_7pyarrow_8_dataset_BinaryExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_BinaryExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Expression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_BinaryExpression;
  return o;
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_16BinaryExpression_left_operand(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_16BinaryExpression_12left_operand_1__get__(o);
}

static PyObject *__pyx_getprop_7pyarrow_8_dataset_16BinaryExpression_right_operand(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7pyarrow_8_dataset_16BinaryExpression_13right_operand_1__get__(o);
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_BinaryExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_1__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16BinaryExpression_3__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7pyarrow_8_dataset_BinaryExpression[] = {
  {(char *)"left_operand", __pyx_getprop_7pyarrow_8_dataset_16BinaryExpression_left_operand, 0, (char *)0, 0},
  {(char *)"right_operand", __pyx_getprop_7pyarrow_8_dataset_16BinaryExpression_right_operand, 0, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_BinaryExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.BinaryExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_BinaryExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_BinaryExpression, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7pyarrow_8_dataset_BinaryExpression, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_1__init__, /*tp_init*/
  #else
  0, /*tp_init*/
  #endif
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_BinaryExpression, /*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_dataset_ScalarExpression __pyx_vtable_7pyarrow_8_dataset_ScalarExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ScalarExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Expression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_ScalarExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_ScalarExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16ScalarExpression_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_16ScalarExpression_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_ScalarExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.ScalarExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_ScalarExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_ScalarExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_16ScalarExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_ScalarExpression, /*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_dataset_FieldExpression __pyx_vtable_7pyarrow_8_dataset_FieldExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_FieldExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_Expression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_FieldExpression *)o);
  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_FieldExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_FieldExpression[] = {
  {"name", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_15FieldExpression_3name, METH_NOARGS, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_15FieldExpression_5__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_15FieldExpression_7__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_FieldExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.FieldExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_FieldExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_FieldExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_15FieldExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_FieldExpression, /*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_dataset_ComparisonExpression __pyx_vtable_7pyarrow_8_dataset_ComparisonExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_ComparisonExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_BinaryExpression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression *)o);
  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_ComparisonExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_ComparisonExpression[] = {
  {"op", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_3op, METH_NOARGS, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_5__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_7__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_ComparisonExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.ComparisonExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_ComparisonExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_ComparisonExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_20ComparisonExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_ComparisonExpression, /*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_dataset_IsValidExpression __pyx_vtable_7pyarrow_8_dataset_IsValidExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_IsValidExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_UnaryExpression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression *)o);
  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_IsValidExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_IsValidExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_17IsValidExpression_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_17IsValidExpression_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_IsValidExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.IsValidExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_IsValidExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_IsValidExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_17IsValidExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_IsValidExpression, /*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_dataset_CastExpression __pyx_vtable_7pyarrow_8_dataset_CastExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_CastExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_CastExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_UnaryExpression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_CastExpression *)o);
  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_CastExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_CastExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_14CastExpression_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_14CastExpression_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_CastExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.CastExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_CastExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_CastExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_14CastExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_CastExpression, /*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_dataset_InExpression __pyx_vtable_7pyarrow_8_dataset_InExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_InExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_InExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_UnaryExpression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_InExpression *)o);
  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_InExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_InExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_12InExpression_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_12InExpression_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_InExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.InExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_InExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_InExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_12InExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_InExpression, /*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_dataset_NotExpression __pyx_vtable_7pyarrow_8_dataset_NotExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_NotExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_NotExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_UnaryExpression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_NotExpression *)o);
  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_NotExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_NotExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13NotExpression_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13NotExpression_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_NotExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.NotExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_NotExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_NotExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_13NotExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_NotExpression, /*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_dataset_AndExpression __pyx_vtable_7pyarrow_8_dataset_AndExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_AndExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_AndExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_BinaryExpression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_AndExpression *)o);
  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_AndExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_AndExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13AndExpression_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_13AndExpression_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_AndExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.AndExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_AndExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_AndExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_13AndExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_AndExpression, /*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_dataset_OrExpression __pyx_vtable_7pyarrow_8_dataset_OrExpression;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset_OrExpression(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset_OrExpression *p;
  PyObject *o = __pyx_tp_new_7pyarrow_8_dataset_BinaryExpression(t, a, k);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7pyarrow_8_dataset_OrExpression *)o);
  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7pyarrow_8_dataset_Expression*)__pyx_vtabptr_7pyarrow_8_dataset_OrExpression;
  return o;
}

static PyMethodDef __pyx_methods_7pyarrow_8_dataset_OrExpression[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_12OrExpression_3__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_7pyarrow_8_dataset_12OrExpression_5__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_7pyarrow_8_dataset_OrExpression = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.OrExpression", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset_OrExpression), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset_Expression, /*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*/
  #if CYTHON_COMPILING_IN_PYPY
  __pyx_pw_7pyarrow_8_dataset_10Expression_5__str__, /*tp_str*/
  #else
  0, /*tp_str*/
  #endif
  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_dataset_OrExpression, /*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*/
  __pyx_pw_7pyarrow_8_dataset_12OrExpression_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7pyarrow_8_dataset_OrExpression, /*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_7pyarrow_8_dataset___pyx_scope_struct__to_batches *__pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct__to_batches[8];
static int __pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct__to_batches = 0;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct__to_batches(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct__to_batches > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches)))) {
    o = (PyObject*)__pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct__to_batches[--__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct__to_batches];
    memset(o, 0, sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset___pyx_scope_struct__to_batches(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *p = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_batch);
  Py_CLEAR(p->__pyx_v_columns);
  Py_CLEAR(p->__pyx_v_filter);
  Py_CLEAR(p->__pyx_v_memory_pool);
  Py_CLEAR(p->__pyx_v_scanner);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_v_task);
  Py_CLEAR(p->__pyx_t_0);
  Py_CLEAR(p->__pyx_t_1);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct__to_batches < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches)))) {
    __pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct__to_batches[__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct__to_batches++] = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_7pyarrow_8_dataset___pyx_scope_struct__to_batches(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *p = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches *)o;
  if (p->__pyx_v_batch) {
    e = (*v)(p->__pyx_v_batch, a); if (e) return e;
  }
  if (p->__pyx_v_columns) {
    e = (*v)(p->__pyx_v_columns, a); if (e) return e;
  }
  if (p->__pyx_v_filter) {
    e = (*v)(p->__pyx_v_filter, a); if (e) return e;
  }
  if (p->__pyx_v_memory_pool) {
    e = (*v)(((PyObject *)p->__pyx_v_memory_pool), a); if (e) return e;
  }
  if (p->__pyx_v_scanner) {
    e = (*v)(((PyObject *)p->__pyx_v_scanner), a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  if (p->__pyx_v_task) {
    e = (*v)(p->__pyx_v_task, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  if (p->__pyx_t_1) {
    e = (*v)(p->__pyx_t_1, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_7pyarrow_8_dataset___pyx_scope_struct__to_batches = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.__pyx_scope_struct__to_batches", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct__to_batches), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset___pyx_scope_struct__to_batches, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_dataset___pyx_scope_struct__to_batches, /*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_7pyarrow_8_dataset___pyx_scope_struct__to_batches, /*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_7pyarrow_8_dataset___pyx_scope_struct_1_execute *__pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct_1_execute[8];
static int __pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_1_execute = 0;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct_1_execute(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *p;
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_1_execute > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute)))) {
    o = (PyObject*)__pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct_1_execute[--__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_1_execute];
    memset(o, 0, sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  p = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *)o);
  new((void*)&(p->__pyx_v_iterator)) arrow::RecordBatchIterator();
  new((void*)&(p->__pyx_v_record_batch)) std::shared_ptr< arrow::RecordBatch> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset___pyx_scope_struct_1_execute(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *p = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *)o;
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->__pyx_v_iterator);
  __Pyx_call_destructor(p->__pyx_v_record_batch);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_1_execute < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute)))) {
    __pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct_1_execute[__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_1_execute++] = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_7pyarrow_8_dataset___pyx_scope_struct_1_execute(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *p = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_1_execute = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.__pyx_scope_struct_1_execute", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_1_execute), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset___pyx_scope_struct_1_execute, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_dataset___pyx_scope_struct_1_execute, /*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_7pyarrow_8_dataset___pyx_scope_struct_1_execute, /*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_7pyarrow_8_dataset___pyx_scope_struct_2_scan *__pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct_2_scan[8];
static int __pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_2_scan = 0;

static PyObject *__pyx_tp_new_7pyarrow_8_dataset___pyx_scope_struct_2_scan(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *p;
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_2_scan > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan)))) {
    o = (PyObject*)__pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct_2_scan[--__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_2_scan];
    memset(o, 0, sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  p = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *)o);
  new((void*)&(p->__pyx_v_iterator)) arrow::dataset::ScanTaskIterator();
  new((void*)&(p->__pyx_v_task)) std::shared_ptr< arrow::dataset::ScanTask> ();
  return o;
}

static void __pyx_tp_dealloc_7pyarrow_8_dataset___pyx_scope_struct_2_scan(PyObject *o) {
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *p = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *)o;
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->__pyx_v_iterator);
  __Pyx_call_destructor(p->__pyx_v_task);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_2_scan < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan)))) {
    __pyx_freelist_7pyarrow_8_dataset___pyx_scope_struct_2_scan[__pyx_freecount_7pyarrow_8_dataset___pyx_scope_struct_2_scan++] = ((struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_7pyarrow_8_dataset___pyx_scope_struct_2_scan(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *p = (struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_2_scan = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.__pyx_scope_struct_2_scan", /*tp_name*/
  sizeof(struct __pyx_obj_7pyarrow_8_dataset___pyx_scope_struct_2_scan), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7pyarrow_8_dataset___pyx_scope_struct_2_scan, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_7pyarrow_8_dataset___pyx_scope_struct_2_scan, /*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_7pyarrow_8_dataset___pyx_scope_struct_2_scan, /*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___Pyx_EnumMeta(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o = (&PyType_Type)->tp_new(t, a, k);
  if (unlikely(!o)) return 0;
  return o;
}

static void __pyx_tp_dealloc___Pyx_EnumMeta(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  PyObject_GC_Track(o);
  (&PyType_Type)->tp_dealloc(o);
}

static int __pyx_tp_traverse___Pyx_EnumMeta(PyObject *o, visitproc v, void *a) {
  int e;
  if (!(&PyType_Type)->tp_traverse); else { e = (&PyType_Type)->tp_traverse(o,v,a); if (e) return e; }
  return 0;
}

static int __pyx_tp_clear___Pyx_EnumMeta(PyObject *o) {
  if (!(&PyType_Type)->tp_clear); else (&PyType_Type)->tp_clear(o);
  return 0;
}
static PyObject *__pyx_sq_item___Pyx_EnumMeta(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 PyMethodDef __pyx_methods___Pyx_EnumMeta[] = {
  {"__reduce_cython__", (PyCFunction)__pyx_pw_8EnumBase_14__Pyx_EnumMeta_7__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_8EnumBase_14__Pyx_EnumMeta_9__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PySequenceMethods __pyx_tp_as_sequence___Pyx_EnumMeta = {
  0, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item___Pyx_EnumMeta, /*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___Pyx_EnumMeta = {
  0, /*mp_length*/
  __pyx_pw_8EnumBase_14__Pyx_EnumMeta_5__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __Pyx_EnumMeta = {
  PyVarObject_HEAD_INIT(0, 0)
  "pyarrow._dataset.__Pyx_EnumMeta", /*tp_name*/
  sizeof(struct __pyx_obj___Pyx_EnumMeta), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc___Pyx_EnumMeta, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  &__pyx_tp_as_sequence___Pyx_EnumMeta, /*tp_as_sequence*/
  &__pyx_tp_as_mapping___Pyx_EnumMeta, /*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___Pyx_EnumMeta, /*tp_traverse*/
  __pyx_tp_clear___Pyx_EnumMeta, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_8EnumBase_14__Pyx_EnumMeta_3__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods___Pyx_EnumMeta, /*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*/
  __pyx_pw_8EnumBase_14__Pyx_EnumMeta_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new___Pyx_EnumMeta, /*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__dataset(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec__dataset},
  {0, NULL}
};
#endif

static struct PyModuleDef __pyx_moduledef = {
    PyModuleDef_HEAD_INIT,
    "_dataset",
    __pyx_k_Dataset_is_currently_unstable_AP, /* 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_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0},
  {&__pyx_n_s_AndExpression, __pyx_k_AndExpression, sizeof(__pyx_k_AndExpression), 0, 0, 1, 1},
  {&__pyx_n_s_BinaryExpression, __pyx_k_BinaryExpression, sizeof(__pyx_k_BinaryExpression), 0, 0, 1, 1},
  {&__pyx_n_s_CastExpression, __pyx_k_CastExpression, sizeof(__pyx_k_CastExpression), 0, 0, 1, 1},
  {&__pyx_n_s_CompareOperator, __pyx_k_CompareOperator, sizeof(__pyx_k_CompareOperator), 0, 0, 1, 1},
  {&__pyx_n_s_ComparisonExpression, __pyx_k_ComparisonExpression, sizeof(__pyx_k_ComparisonExpression), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset, __pyx_k_Dataset, sizeof(__pyx_k_Dataset), 0, 0, 1, 1},
  {&__pyx_n_s_DatasetFactory, __pyx_k_DatasetFactory, sizeof(__pyx_k_DatasetFactory), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset_to_batches, __pyx_k_Dataset_to_batches, sizeof(__pyx_k_Dataset_to_batches), 0, 0, 1, 1},
  {&__pyx_n_s_DirectoryPartitioning, __pyx_k_DirectoryPartitioning, sizeof(__pyx_k_DirectoryPartitioning), 0, 0, 1, 1},
  {&__pyx_n_s_EnumBase, __pyx_k_EnumBase, sizeof(__pyx_k_EnumBase), 0, 0, 1, 1},
  {&__pyx_n_s_EnumType, __pyx_k_EnumType, sizeof(__pyx_k_EnumType), 0, 0, 1, 1},
  {&__pyx_n_s_Equal, __pyx_k_Equal, sizeof(__pyx_k_Equal), 0, 0, 1, 1},
  {&__pyx_n_s_Expression, __pyx_k_Expression, sizeof(__pyx_k_Expression), 0, 0, 1, 1},
  {&__pyx_n_s_FieldExpression, __pyx_k_FieldExpression, sizeof(__pyx_k_FieldExpression), 0, 0, 1, 1},
  {&__pyx_n_s_FileFormat, __pyx_k_FileFormat, sizeof(__pyx_k_FileFormat), 0, 0, 1, 1},
  {&__pyx_n_s_FileSystemFactoryOptions, __pyx_k_FileSystemFactoryOptions, sizeof(__pyx_k_FileSystemFactoryOptions), 0, 0, 1, 1},
  {&__pyx_n_s_FileSystemSource, __pyx_k_FileSystemSource, sizeof(__pyx_k_FileSystemSource), 0, 0, 1, 1},
  {&__pyx_n_s_FileSystemSourceFactory, __pyx_k_FileSystemSourceFactory, sizeof(__pyx_k_FileSystemSourceFactory), 0, 0, 1, 1},
  {&__pyx_n_s_Greater, __pyx_k_Greater, sizeof(__pyx_k_Greater), 0, 0, 1, 1},
  {&__pyx_n_s_GreaterEqual, __pyx_k_GreaterEqual, sizeof(__pyx_k_GreaterEqual), 0, 0, 1, 1},
  {&__pyx_n_s_HivePartitioning, __pyx_k_HivePartitioning, sizeof(__pyx_k_HivePartitioning), 0, 0, 1, 1},
  {&__pyx_n_s_InExpression, __pyx_k_InExpression, sizeof(__pyx_k_InExpression), 0, 0, 1, 1},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xd4, __pyx_k_Incompatible_checksums_s_vs_0xd4, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xd4), 0, 0, 1, 0},
  {&__pyx_n_s_IntEnum, __pyx_k_IntEnum, sizeof(__pyx_k_IntEnum), 0, 0, 1, 1},
  {&__pyx_n_s_IsValidExpression, __pyx_k_IsValidExpression, sizeof(__pyx_k_IsValidExpression), 0, 0, 1, 1},
  {&__pyx_n_s_Less, __pyx_k_Less, sizeof(__pyx_k_Less), 0, 0, 1, 1},
  {&__pyx_n_s_LessEqual, __pyx_k_LessEqual, sizeof(__pyx_k_LessEqual), 0, 0, 1, 1},
  {&__pyx_kp_u_Must_pass_either_paths_or_a_File, __pyx_k_Must_pass_either_paths_or_a_File, sizeof(__pyx_k_Must_pass_either_paths_or_a_File), 0, 1, 0, 0},
  {&__pyx_kp_u_Neither_left_nor_right_arguments, __pyx_k_Neither_left_nor_right_arguments, sizeof(__pyx_k_Neither_left_nor_right_arguments), 0, 1, 0, 0},
  {&__pyx_n_s_NotEqual, __pyx_k_NotEqual, sizeof(__pyx_k_NotEqual), 0, 0, 1, 1},
  {&__pyx_n_s_NotExpression, __pyx_k_NotExpression, sizeof(__pyx_k_NotExpression), 0, 0, 1, 1},
  {&__pyx_n_s_NotImplemented, __pyx_k_NotImplemented, sizeof(__pyx_k_NotImplemented), 0, 0, 1, 1},
  {&__pyx_kp_u_Not_yet_supported_scalar_value, __pyx_k_Not_yet_supported_scalar_value, sizeof(__pyx_k_Not_yet_supported_scalar_value), 0, 1, 0, 0},
  {&__pyx_n_s_OrExpression, __pyx_k_OrExpression, sizeof(__pyx_k_OrExpression), 0, 0, 1, 1},
  {&__pyx_n_s_OrderedDict, __pyx_k_OrderedDict, sizeof(__pyx_k_OrderedDict), 0, 0, 1, 1},
  {&__pyx_n_s_ParquetFileFormat, __pyx_k_ParquetFileFormat, sizeof(__pyx_k_ParquetFileFormat), 0, 0, 1, 1},
  {&__pyx_n_s_Partitioning, __pyx_k_Partitioning, sizeof(__pyx_k_Partitioning), 0, 0, 1, 1},
  {&__pyx_n_s_PartitioningFactory, __pyx_k_PartitioningFactory, sizeof(__pyx_k_PartitioningFactory), 0, 0, 1, 1},
  {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1},
  {&__pyx_n_s_Pyx_EnumBase, __pyx_k_Pyx_EnumBase, sizeof(__pyx_k_Pyx_EnumBase), 0, 0, 1, 1},
  {&__pyx_n_s_Pyx_EnumBase___new, __pyx_k_Pyx_EnumBase___new, sizeof(__pyx_k_Pyx_EnumBase___new), 0, 0, 1, 1},
  {&__pyx_n_s_Pyx_EnumBase___repr, __pyx_k_Pyx_EnumBase___repr, sizeof(__pyx_k_Pyx_EnumBase___repr), 0, 0, 1, 1},
  {&__pyx_n_s_Pyx_EnumBase___str, __pyx_k_Pyx_EnumBase___str, sizeof(__pyx_k_Pyx_EnumBase___str), 0, 0, 1, 1},
  {&__pyx_n_s_ScalarExpression, __pyx_k_ScalarExpression, sizeof(__pyx_k_ScalarExpression), 0, 0, 1, 1},
  {&__pyx_n_s_ScanTask, __pyx_k_ScanTask, sizeof(__pyx_k_ScanTask), 0, 0, 1, 1},
  {&__pyx_n_s_ScanTask_execute, __pyx_k_ScanTask_execute, sizeof(__pyx_k_ScanTask_execute), 0, 0, 1, 1},
  {&__pyx_n_s_Scanner, __pyx_k_Scanner, sizeof(__pyx_k_Scanner), 0, 0, 1, 1},
  {&__pyx_n_s_Scanner_scan, __pyx_k_Scanner_scan, sizeof(__pyx_k_Scanner_scan), 0, 0, 1, 1},
  {&__pyx_n_s_Source, __pyx_k_Source, sizeof(__pyx_k_Source), 0, 0, 1, 1},
  {&__pyx_n_s_SourceFactory, __pyx_k_SourceFactory, sizeof(__pyx_k_SourceFactory), 0, 0, 1, 1},
  {&__pyx_n_s_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 0, 1, 1},
  {&__pyx_kp_u_The_number_of_files_resulting_fr, __pyx_k_The_number_of_files_resulting_fr, sizeof(__pyx_k_The_number_of_files_resulting_fr), 0, 1, 0, 0},
  {&__pyx_n_s_TreeSource, __pyx_k_TreeSource, sizeof(__pyx_k_TreeSource), 0, 0, 1, 1},
  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
  {&__pyx_n_s_UnaryExpression, __pyx_k_UnaryExpression, sizeof(__pyx_k_UnaryExpression), 0, 0, 1, 1},
  {&__pyx_kp_s_Unknown_enum_value_s, __pyx_k_Unknown_enum_value_s, sizeof(__pyx_k_Unknown_enum_value_s), 0, 0, 1, 0},
  {&__pyx_kp_u_Use_one_of_the_subclasses_inste, __pyx_k_Use_one_of_the_subclasses_inste, sizeof(__pyx_k_Use_one_of_the_subclasses_inste), 0, 1, 0, 0},
  {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
  {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1},
  {&__pyx_n_s_binop, __pyx_k_binop, sizeof(__pyx_k_binop), 0, 0, 1, 1},
  {&__pyx_n_s_c_field_names, __pyx_k_c_field_names, sizeof(__pyx_k_c_field_names), 0, 0, 1, 1},
  {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 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_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1},
  {&__pyx_n_s_cls, __pyx_k_cls, sizeof(__pyx_k_cls), 0, 0, 1, 1},
  {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1},
  {&__pyx_n_s_columns, __pyx_k_columns, sizeof(__pyx_k_columns), 0, 0, 1, 1},
  {&__pyx_n_s_dataset, __pyx_k_dataset, sizeof(__pyx_k_dataset), 0, 0, 1, 1},
  {&__pyx_n_s_dct, __pyx_k_dct, sizeof(__pyx_k_dct), 0, 0, 1, 1},
  {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
  {&__pyx_n_s_discover, __pyx_k_discover, sizeof(__pyx_k_discover), 0, 0, 1, 1},
  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
  {&__pyx_n_s_enum, __pyx_k_enum, sizeof(__pyx_k_enum), 0, 0, 1, 1},
  {&__pyx_n_s_exclude_invalid_files, __pyx_k_exclude_invalid_files, sizeof(__pyx_k_exclude_invalid_files), 0, 0, 1, 1},
  {&__pyx_n_s_execute, __pyx_k_execute, sizeof(__pyx_k_execute), 0, 0, 1, 1},
  {&__pyx_n_s_factories, __pyx_k_factories, sizeof(__pyx_k_factories), 0, 0, 1, 1},
  {&__pyx_n_s_factory, __pyx_k_factory, sizeof(__pyx_k_factory), 0, 0, 1, 1},
  {&__pyx_n_s_field_names, __pyx_k_field_names, sizeof(__pyx_k_field_names), 0, 0, 1, 1},
  {&__pyx_n_s_file_format, __pyx_k_file_format, sizeof(__pyx_k_file_format), 0, 0, 1, 1},
  {&__pyx_n_s_filesystem, __pyx_k_filesystem, sizeof(__pyx_k_filesystem), 0, 0, 1, 1},
  {&__pyx_n_u_filesystem, __pyx_k_filesystem, sizeof(__pyx_k_filesystem), 0, 1, 0, 1},
  {&__pyx_n_s_filter, __pyx_k_filter, sizeof(__pyx_k_filter), 0, 0, 1, 1},
  {&__pyx_n_s_fn, __pyx_k_fn, sizeof(__pyx_k_fn), 0, 0, 1, 1},
  {&__pyx_n_s_forbid_instantiation, __pyx_k_forbid_instantiation, sizeof(__pyx_k_forbid_instantiation), 0, 0, 1, 1},
  {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
  {&__pyx_n_s_frombytes, __pyx_k_frombytes, sizeof(__pyx_k_frombytes), 0, 0, 1, 1},
  {&__pyx_n_s_get_target_stats, __pyx_k_get_target_stats, sizeof(__pyx_k_get_target_stats), 0, 0, 1, 1},
  {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
  {&__pyx_n_s_haystack, __pyx_k_haystack, sizeof(__pyx_k_haystack), 0, 0, 1, 1},
  {&__pyx_n_u_hive, __pyx_k_hive, sizeof(__pyx_k_hive), 0, 1, 0, 1},
  {&__pyx_n_s_ignore_prefixes, __pyx_k_ignore_prefixes, sizeof(__pyx_k_ignore_prefixes), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
  {&__pyx_kp_u_is_an_abstract_class_thus_canno, __pyx_k_is_an_abstract_class_thus_canno, sizeof(__pyx_k_is_an_abstract_class_thus_canno), 0, 1, 0, 0},
  {&__pyx_n_s_klass, __pyx_k_klass, sizeof(__pyx_k_klass), 0, 0, 1, 1},
  {&__pyx_n_s_left, __pyx_k_left, sizeof(__pyx_k_left), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_members, __pyx_k_members, sizeof(__pyx_k_members), 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_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
  {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
  {&__pyx_n_s_msg, __pyx_k_msg, sizeof(__pyx_k_msg), 0, 0, 1, 1},
  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
  {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
  {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
  {&__pyx_n_s_op, __pyx_k_op, sizeof(__pyx_k_op), 0, 0, 1, 1},
  {&__pyx_n_s_operand, __pyx_k_operand, sizeof(__pyx_k_operand), 0, 0, 1, 1},
  {&__pyx_n_s_options, __pyx_k_options, sizeof(__pyx_k_options), 0, 0, 1, 1},
  {&__pyx_n_s_pa, __pyx_k_pa, sizeof(__pyx_k_pa), 0, 0, 1, 1},
  {&__pyx_n_s_parents, __pyx_k_parents, sizeof(__pyx_k_parents), 0, 0, 1, 1},
  {&__pyx_n_u_parquet, __pyx_k_parquet, sizeof(__pyx_k_parquet), 0, 1, 0, 1},
  {&__pyx_n_s_partition_base_dir, __pyx_k_partition_base_dir, sizeof(__pyx_k_partition_base_dir), 0, 0, 1, 1},
  {&__pyx_n_s_partitions, __pyx_k_partitions, sizeof(__pyx_k_partitions), 0, 0, 1, 1},
  {&__pyx_n_s_paths_or_selector, __pyx_k_paths_or_selector, sizeof(__pyx_k_paths_or_selector), 0, 0, 1, 1},
  {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
  {&__pyx_n_s_pyarrow, __pyx_k_pyarrow, sizeof(__pyx_k_pyarrow), 0, 0, 1, 1},
  {&__pyx_n_s_pyarrow__dataset, __pyx_k_pyarrow__dataset, sizeof(__pyx_k_pyarrow__dataset), 0, 0, 1, 1},
  {&__pyx_kp_s_pyarrow__dataset_pyx, __pyx_k_pyarrow__dataset_pyx, sizeof(__pyx_k_pyarrow__dataset_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_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle___Pyx_EnumMeta, __pyx_k_pyx_unpickle___Pyx_EnumMeta, sizeof(__pyx_k_pyx_unpickle___Pyx_EnumMeta), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
  {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
  {&__pyx_n_s_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_res, __pyx_k_res, sizeof(__pyx_k_res), 0, 0, 1, 1},
  {&__pyx_n_s_right, __pyx_k_right, sizeof(__pyx_k_right), 0, 0, 1, 1},
  {&__pyx_n_s_root_partition, __pyx_k_root_partition, sizeof(__pyx_k_root_partition), 0, 0, 1, 1},
  {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1},
  {&__pyx_kp_s_s_s, __pyx_k_s_s, sizeof(__pyx_k_s_s), 0, 0, 1, 0},
  {&__pyx_kp_s_s_s_d, __pyx_k_s_s_d, sizeof(__pyx_k_s_s_d), 0, 0, 1, 0},
  {&__pyx_n_s_safe, __pyx_k_safe, sizeof(__pyx_k_safe), 0, 0, 1, 1},
  {&__pyx_n_s_scan, __pyx_k_scan, sizeof(__pyx_k_scan), 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_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
  {&__pyx_kp_s_self_binary_self_comparison_self, __pyx_k_self_binary_self_comparison_self, sizeof(__pyx_k_self_binary_self_comparison_self), 0, 0, 1, 0},
  {&__pyx_kp_s_self_binary_self_expr_self_wrapp, __pyx_k_self_binary_self_expr_self_wrapp, sizeof(__pyx_k_self_binary_self_expr_self_wrapp), 0, 0, 1, 0},
  {&__pyx_kp_s_self_dataset_self_wrapped_cannot, __pyx_k_self_dataset_self_wrapped_cannot, sizeof(__pyx_k_self_dataset_self_wrapped_cannot), 0, 0, 1, 0},
  {&__pyx_kp_s_self_directory_partitioning_self, __pyx_k_self_directory_partitioning_self, sizeof(__pyx_k_self_directory_partitioning_self), 0, 0, 1, 0},
  {&__pyx_kp_s_self_expr_self_scalar_self_wrapp, __pyx_k_self_expr_self_scalar_self_wrapp, sizeof(__pyx_k_self_expr_self_scalar_self_wrapp), 0, 0, 1, 0},
  {&__pyx_kp_s_self_expr_self_unary_self_wrappe, __pyx_k_self_expr_self_unary_self_wrappe, sizeof(__pyx_k_self_expr_self_unary_self_wrappe), 0, 0, 1, 0},
  {&__pyx_kp_s_self_expr_self_wrapped_cannot_be, __pyx_k_self_expr_self_wrapped_cannot_be, sizeof(__pyx_k_self_expr_self_wrapped_cannot_be), 0, 0, 1, 0},
  {&__pyx_kp_s_self_factory_self_filesystem_fac, __pyx_k_self_factory_self_filesystem_fac, sizeof(__pyx_k_self_factory_self_filesystem_fac), 0, 0, 1, 0},
  {&__pyx_kp_s_self_factory_self_wrapped_cannot, __pyx_k_self_factory_self_wrapped_cannot, sizeof(__pyx_k_self_factory_self_wrapped_cannot), 0, 0, 1, 0},
  {&__pyx_kp_s_self_filesystem_source_self_sour, __pyx_k_self_filesystem_source_self_sour, sizeof(__pyx_k_self_filesystem_source_self_sour), 0, 0, 1, 0},
  {&__pyx_kp_s_self_format_self_wrapped_cannot, __pyx_k_self_format_self_wrapped_cannot, sizeof(__pyx_k_self_format_self_wrapped_cannot), 0, 0, 1, 0},
  {&__pyx_kp_s_self_hive_partitioning_self_part, __pyx_k_self_hive_partitioning_self_part, sizeof(__pyx_k_self_hive_partitioning_self_part), 0, 0, 1, 0},
  {&__pyx_kp_s_self_options_cannot_be_converted, __pyx_k_self_options_cannot_be_converted, sizeof(__pyx_k_self_options_cannot_be_converted), 0, 0, 1, 0},
  {&__pyx_kp_s_self_partitioning_self_wrapped_c, __pyx_k_self_partitioning_self_wrapped_c, sizeof(__pyx_k_self_partitioning_self_wrapped_c), 0, 0, 1, 0},
  {&__pyx_kp_s_self_scanner_self_wrapped_cannot, __pyx_k_self_scanner_self_wrapped_cannot, sizeof(__pyx_k_self_scanner_self_wrapped_cannot), 0, 0, 1, 0},
  {&__pyx_kp_s_self_source_self_tree_source_sel, __pyx_k_self_source_self_tree_source_sel, sizeof(__pyx_k_self_source_self_tree_source_sel), 0, 0, 1, 0},
  {&__pyx_kp_s_self_source_self_wrapped_cannot, __pyx_k_self_source_self_wrapped_cannot, sizeof(__pyx_k_self_source_self_wrapped_cannot), 0, 0, 1, 0},
  {&__pyx_kp_s_self_task_self_wrapped_cannot_be, __pyx_k_self_task_self_wrapped_cannot_be, sizeof(__pyx_k_self_task_self_wrapped_cannot_be), 0, 0, 1, 0},
  {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 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_slots, __pyx_k_slots, sizeof(__pyx_k_slots), 0, 0, 1, 1},
  {&__pyx_n_s_sources, __pyx_k_sources, sizeof(__pyx_k_sources), 0, 0, 1, 1},
  {&__pyx_n_s_staticmethod, __pyx_k_staticmethod, sizeof(__pyx_k_staticmethod), 0, 0, 1, 1},
  {&__pyx_n_s_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
  {&__pyx_n_s_string_types, __pyx_k_string_types, sizeof(__pyx_k_string_types), 0, 0, 1, 1},
  {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
  {&__pyx_n_s_subclasses, __pyx_k_subclasses, sizeof(__pyx_k_subclasses), 0, 0, 1, 1},
  {&__pyx_n_s_subclasses_2, __pyx_k_subclasses_2, sizeof(__pyx_k_subclasses_2), 0, 0, 1, 1},
  {&__pyx_n_s_subclasses_instead, __pyx_k_subclasses_instead, sizeof(__pyx_k_subclasses_instead), 0, 0, 1, 1},
  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1},
  {&__pyx_n_s_to, __pyx_k_to, sizeof(__pyx_k_to), 0, 0, 1, 1},
  {&__pyx_n_s_to_batches, __pyx_k_to_batches, sizeof(__pyx_k_to_batches), 0, 0, 1, 1},
  {&__pyx_n_s_to_table, __pyx_k_to_table, sizeof(__pyx_k_to_table), 0, 0, 1, 1},
  {&__pyx_n_s_tobytes, __pyx_k_tobytes, sizeof(__pyx_k_tobytes), 0, 0, 1, 1},
  {&__pyx_n_u_tree, __pyx_k_tree, sizeof(__pyx_k_tree), 0, 1, 0, 1},
  {&__pyx_n_s_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
  {&__pyx_n_s_unsafe, __pyx_k_unsafe, sizeof(__pyx_k_unsafe), 0, 0, 1, 1},
  {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 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_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1},
  {&__pyx_n_s_value, __pyx_k_value, sizeof(__pyx_k_value), 0, 0, 1, 1},
  {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_staticmethod = __Pyx_GetBuiltinName(__pyx_n_s_staticmethod); if (!__pyx_builtin_staticmethod) __PYX_ERR(0, 191, __pyx_L1_error)
  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 44, __pyx_L1_error)
  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 657, __pyx_L1_error)
  __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 965, __pyx_L1_error)
  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(0, 1105, __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("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_self_format_self_wrapped_cannot); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);

  /* "(tree fragment)":4
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_self_format_self_wrapped_cannot); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_self_format_self_wrapped_cannot); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);

  /* "(tree fragment)":4
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.format,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_self_format_self_wrapped_cannot); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_self_partitioning_self_wrapped_c); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__6);
  __Pyx_GIVEREF(__pyx_tuple__6);

  /* "(tree fragment)":4
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_self_partitioning_self_wrapped_c); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_wrapped_cannot); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);

  /* "(tree fragment)":4
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_wrapped_cannot); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_self_directory_partitioning_self); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);

  /* "(tree fragment)":4
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.directory_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_self_directory_partitioning_self); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_self_hive_partitioning_self_part); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);

  /* "(tree fragment)":4
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.hive_partitioning,self.partitioning,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_s_self_hive_partitioning_self_part); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__13);
  __Pyx_GIVEREF(__pyx_tuple__13);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_self_options_cannot_be_converted); 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("self.options cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.options cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_self_options_cannot_be_converted); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_wrapped_cannot); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);

  /* "(tree fragment)":4
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_wrapped_cannot); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);

  /* "pyarrow/_dataset.pyx":529
 *                 )
 *         else:
 *             raise TypeError('Must pass either paths or a FileSelector')             # <<<<<<<<<<<<<<
 * 
 *         self.init(GetResultValue(result))
 */
  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_Must_pass_either_paths_or_a_File); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_filesystem_fac); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);

  /* "(tree fragment)":4
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.filesystem_factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_filesystem_fac); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_self_source_self_wrapped_cannot); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);

  /* "(tree fragment)":4
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_self_source_self_wrapped_cannot); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_self_source_self_tree_source_sel); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);

  /* "(tree fragment)":4
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.source,self.tree_source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_self_source_self_tree_source_sel); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);

  /* "pyarrow/_dataset.pyx":657
 * 
 *         if c_file_stats.size() != c_partitions.size():
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 'The number of files resulting from paths_or_selector must be '
 *                 'equal to the number of partitions.'
 */
  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_u_The_number_of_files_resulting_fr); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 657, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);

  /* "pyarrow/_dataset.pyx":663
 * 
 *         if root_partition is None:
 *             root_partition = ScalarExpression(True)             # <<<<<<<<<<<<<<
 * 
 *         result = CFileSystemSource.Make(
 */
  __pyx_tuple__26 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(0, 663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__26);
  __Pyx_GIVEREF(__pyx_tuple__26);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_self_filesystem_source_self_sour); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);

  /* "(tree fragment)":4
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.filesystem_source,self.source,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_self_filesystem_source_self_sour); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_wrapped_cannot); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);

  /* "(tree fragment)":4
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.factory,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_kp_s_self_factory_self_wrapped_cannot); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__30);
  __Pyx_GIVEREF(__pyx_tuple__30);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_self_dataset_self_wrapped_cannot); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);

  /* "(tree fragment)":4
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.dataset,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_self_dataset_self_wrapped_cannot); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__33 = PyTuple_Pack(1, __pyx_kp_s_self_task_self_wrapped_cannot_be); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);

  /* "(tree fragment)":4
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.task,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__34 = PyTuple_Pack(1, __pyx_kp_s_self_task_self_wrapped_cannot_be); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_self_scanner_self_wrapped_cannot); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);

  /* "(tree fragment)":4
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.scanner,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_self_scanner_self_wrapped_cannot); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__36);
  __Pyx_GIVEREF(__pyx_tuple__36);

  /* "pyarrow/_dataset.pyx":1113
 *             return NotImplemented
 *     else:
 *         raise TypeError('Neither left nor right arguments are Expressions')             # <<<<<<<<<<<<<<
 * 
 *     return fn(left, right)
 */
  __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_u_Neither_left_nor_right_arguments); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 1113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_wrapped_cannot_be); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__38);
  __Pyx_GIVEREF(__pyx_tuple__38);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_wrapped_cannot_be); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__40 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__40);
  __Pyx_GIVEREF(__pyx_tuple__40);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__41);
  __Pyx_GIVEREF(__pyx_tuple__41);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__42 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_expr_self_wrapp); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__42);
  __Pyx_GIVEREF(__pyx_tuple__42);

  /* "(tree fragment)":4
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_expr_self_wrapp); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__43);
  __Pyx_GIVEREF(__pyx_tuple__43);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_scalar_self_wrapp); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__44);
  __Pyx_GIVEREF(__pyx_tuple__44);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_scalar_self_wrapp); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__45);
  __Pyx_GIVEREF(__pyx_tuple__45);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_scalar_self_wrapp); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__46);
  __Pyx_GIVEREF(__pyx_tuple__46);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.scalar,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_scalar_self_wrapp); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__47);
  __Pyx_GIVEREF(__pyx_tuple__47);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_comparison_self); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__48);
  __Pyx_GIVEREF(__pyx_tuple__48);

  /* "(tree fragment)":4
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.comparison,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__49 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_comparison_self); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__49);
  __Pyx_GIVEREF(__pyx_tuple__49);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__50);
  __Pyx_GIVEREF(__pyx_tuple__50);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__51);
  __Pyx_GIVEREF(__pyx_tuple__51);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__52 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__52);
  __Pyx_GIVEREF(__pyx_tuple__52);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__53);
  __Pyx_GIVEREF(__pyx_tuple__53);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__54 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__54);
  __Pyx_GIVEREF(__pyx_tuple__54);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__55 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__55);
  __Pyx_GIVEREF(__pyx_tuple__55);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__56 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__56);
  __Pyx_GIVEREF(__pyx_tuple__56);

  /* "(tree fragment)":4
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.expr,self.unary,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__57 = PyTuple_Pack(1, __pyx_kp_s_self_expr_self_unary_self_wrappe); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__57);
  __Pyx_GIVEREF(__pyx_tuple__57);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__58 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_expr_self_wrapp); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__58);
  __Pyx_GIVEREF(__pyx_tuple__58);

  /* "(tree fragment)":4
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__59 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_expr_self_wrapp); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__59);
  __Pyx_GIVEREF(__pyx_tuple__59);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 */
  __pyx_tuple__60 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_expr_self_wrapp); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__60);
  __Pyx_GIVEREF(__pyx_tuple__60);

  /* "(tree fragment)":4
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError("self.binary,self.expr,self.wrapped cannot be converted to a Python object for pickling")             # <<<<<<<<<<<<<<
 */
  __pyx_tuple__61 = PyTuple_Pack(1, __pyx_kp_s_self_binary_self_expr_self_wrapp); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(1, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__61);
  __Pyx_GIVEREF(__pyx_tuple__61);

  /* "pyarrow/_dataset.pyx":35
 * 
 * 
 * def _forbid_instantiation(klass, subclasses_instead=True):             # <<<<<<<<<<<<<<
 *     msg = '{} is an abstract class thus cannot be initialized.'.format(
 *         klass.__name__
 */
  __pyx_tuple__62 = PyTuple_Pack(5, __pyx_n_s_klass, __pyx_n_s_subclasses_instead, __pyx_n_s_msg, __pyx_n_s_subclasses_2, __pyx_n_s_cls); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__62);
  __Pyx_GIVEREF(__pyx_tuple__62);
  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(2, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__62, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyarrow__dataset_pyx, __pyx_n_s_forbid_instantiation, 35, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(0, 35, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":192
 * 
 *     @staticmethod
 *     def discover(field_names):             # <<<<<<<<<<<<<<
 *         """
 *         Discover a DirectoryPartitioning.
 */
  __pyx_tuple__64 = PyTuple_Pack(4, __pyx_n_s_field_names, __pyx_n_s_factory, __pyx_n_s_c_field_names, __pyx_n_s_s); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__64);
  __Pyx_GIVEREF(__pyx_tuple__64);
  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyarrow__dataset_pyx, __pyx_n_s_discover, 192, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(0, 192, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":263
 * 
 *     @staticmethod
 *     def discover():             # <<<<<<<<<<<<<<
 *         """
 *         Discover a HivePartitioning.
 */
  __pyx_tuple__66 = PyTuple_Pack(1, __pyx_n_s_factory); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(0, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__66);
  __Pyx_GIVEREF(__pyx_tuple__66);
  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__66, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyarrow__dataset_pyx, __pyx_n_s_discover, 263, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(0, 263, __pyx_L1_error)

  /* "pyarrow/_dataset.pyx":1095
 * 
 * 
 * def _binop(fn, left, right):             # <<<<<<<<<<<<<<
 *     # cython doesn't support reverse operands like __radd__ just passes the
 *     # arguments in the same order as the binary operator called
 */
  __pyx_tuple__68 = PyTuple_Pack(3, __pyx_n_s_fn, __pyx_n_s_left, __pyx_n_s_right); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(0, 1095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__68);
  __Pyx_GIVEREF(__pyx_tuple__68);
  __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__68, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyarrow__dataset_pyx, __pyx_n_s_binop, 1095, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(0, 1095, __pyx_L1_error)

  /* "EnumBase":28
 * class __Pyx_EnumBase(int):
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):             # <<<<<<<<<<<<<<
 *         for v in cls:
 *             if v == value:
 */
  __pyx_tuple__70 = PyTuple_Pack(5, __pyx_n_s_cls, __pyx_n_s_value, __pyx_n_s_name_2, __pyx_n_s_v, __pyx_n_s_res); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__70);
  __Pyx_GIVEREF(__pyx_tuple__70);
  __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__70, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_new, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(1, 28, __pyx_L1_error)
  __pyx_tuple__72 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__72);
  __Pyx_GIVEREF(__pyx_tuple__72);

  /* "EnumBase":39
 *         cls.__members__[name] = res
 *         return res
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):
 */
  __pyx_tuple__73 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__73);
  __Pyx_GIVEREF(__pyx_tuple__73);
  __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_repr, 39, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) __PYX_ERR(1, 39, __pyx_L1_error)

  /* "EnumBase":41
 *     def __repr__(self):
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return "%s.%s" % (self.__class__.__name__, self.name)
 * 
 */
  __pyx_tuple__75 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(1, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__75);
  __Pyx_GIVEREF(__pyx_tuple__75);
  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_str, 41, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(1, 41, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __pyx_unpickle___Pyx_EnumMeta(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_tuple__77 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_tuple__77);
  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle___Pyx_EnumMeta, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  __pyx_int_222419149 = PyInt_FromLong(222419149L); if (unlikely(!__pyx_int_222419149)) __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_OrderedDict = Py_None; Py_INCREF(Py_None);
  __Pyx_EnumBase = Py_None; Py_INCREF(Py_None);
  __Pyx_globals = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  __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_dataset_FileFormat = &__pyx_vtable_7pyarrow_8_dataset_FileFormat;
  __pyx_vtable_7pyarrow_8_dataset_FileFormat.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *, std::shared_ptr<arrow::dataset::FileFormat>  const &))__pyx_f_7pyarrow_8_dataset_10FileFormat_init;
  __pyx_vtable_7pyarrow_8_dataset_FileFormat.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::FileFormat>  &))__pyx_f_7pyarrow_8_dataset_10FileFormat_wrap;
  __pyx_vtable_7pyarrow_8_dataset_FileFormat.unwrap = (std::shared_ptr<arrow::dataset::FileFormat>  (*)(struct __pyx_obj_7pyarrow_8_dataset_FileFormat *))__pyx_f_7pyarrow_8_dataset_10FileFormat_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_FileFormat) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_FileFormat.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_FileFormat.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_FileFormat.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_FileFormat.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_FileFormat.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_FileFormat) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FileFormat, (PyObject *)&__pyx_type_7pyarrow_8_dataset_FileFormat) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_FileFormat) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_FileFormat = &__pyx_type_7pyarrow_8_dataset_FileFormat;
  __pyx_vtabptr_7pyarrow_8_dataset_ParquetFileFormat = &__pyx_vtable_7pyarrow_8_dataset_ParquetFileFormat;
  __pyx_vtable_7pyarrow_8_dataset_ParquetFileFormat.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_FileFormat;
  __pyx_type_7pyarrow_8_dataset_ParquetFileFormat.tp_base = __pyx_ptype_7pyarrow_8_dataset_FileFormat;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_ParquetFileFormat) < 0) __PYX_ERR(0, 77, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_ParquetFileFormat.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_ParquetFileFormat.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_ParquetFileFormat.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_ParquetFileFormat.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_ParquetFileFormat.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_ParquetFileFormat) < 0) __PYX_ERR(0, 77, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ParquetFileFormat, (PyObject *)&__pyx_type_7pyarrow_8_dataset_ParquetFileFormat) < 0) __PYX_ERR(0, 77, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_ParquetFileFormat) < 0) __PYX_ERR(0, 77, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_ParquetFileFormat = &__pyx_type_7pyarrow_8_dataset_ParquetFileFormat;
  __pyx_vtabptr_7pyarrow_8_dataset_Partitioning = &__pyx_vtable_7pyarrow_8_dataset_Partitioning;
  __pyx_vtable_7pyarrow_8_dataset_Partitioning.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *, std::shared_ptr<arrow::dataset::Partitioning>  const &))__pyx_f_7pyarrow_8_dataset_12Partitioning_init;
  __pyx_vtable_7pyarrow_8_dataset_Partitioning.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::Partitioning>  const &))__pyx_f_7pyarrow_8_dataset_12Partitioning_wrap;
  __pyx_vtable_7pyarrow_8_dataset_Partitioning.unwrap = (std::shared_ptr<arrow::dataset::Partitioning>  (*)(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *))__pyx_f_7pyarrow_8_dataset_12Partitioning_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_Partitioning) < 0) __PYX_ERR(0, 83, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_Partitioning.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_Partitioning.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_Partitioning.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_Partitioning.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_Partitioning.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_Partitioning) < 0) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Partitioning, (PyObject *)&__pyx_type_7pyarrow_8_dataset_Partitioning) < 0) __PYX_ERR(0, 83, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_Partitioning) < 0) __PYX_ERR(0, 83, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_Partitioning = &__pyx_type_7pyarrow_8_dataset_Partitioning;
  __pyx_vtabptr_7pyarrow_8_dataset_PartitioningFactory = &__pyx_vtable_7pyarrow_8_dataset_PartitioningFactory;
  __pyx_vtable_7pyarrow_8_dataset_PartitioningFactory.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *, std::shared_ptr<arrow::dataset::PartitioningFactory>  const &))__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_init;
  __pyx_vtable_7pyarrow_8_dataset_PartitioningFactory.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::PartitioningFactory>  const &))__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_wrap;
  __pyx_vtable_7pyarrow_8_dataset_PartitioningFactory.unwrap = (std::shared_ptr<arrow::dataset::PartitioningFactory>  (*)(struct __pyx_obj_7pyarrow_8_dataset_PartitioningFactory *))__pyx_f_7pyarrow_8_dataset_19PartitioningFactory_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_PartitioningFactory) < 0) __PYX_ERR(0, 125, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_PartitioningFactory.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_PartitioningFactory.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_PartitioningFactory.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_PartitioningFactory.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_PartitioningFactory.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_PartitioningFactory) < 0) __PYX_ERR(0, 125, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PartitioningFactory, (PyObject *)&__pyx_type_7pyarrow_8_dataset_PartitioningFactory) < 0) __PYX_ERR(0, 125, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_PartitioningFactory) < 0) __PYX_ERR(0, 125, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_PartitioningFactory = &__pyx_type_7pyarrow_8_dataset_PartitioningFactory;
  __pyx_vtabptr_7pyarrow_8_dataset_DirectoryPartitioning = &__pyx_vtable_7pyarrow_8_dataset_DirectoryPartitioning;
  __pyx_vtable_7pyarrow_8_dataset_DirectoryPartitioning.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Partitioning;
  __pyx_vtable_7pyarrow_8_dataset_DirectoryPartitioning.__pyx_base.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *, std::shared_ptr<arrow::dataset::Partitioning>  const &))__pyx_f_7pyarrow_8_dataset_21DirectoryPartitioning_init;
  __pyx_type_7pyarrow_8_dataset_DirectoryPartitioning.tp_base = __pyx_ptype_7pyarrow_8_dataset_Partitioning;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_DirectoryPartitioning) < 0) __PYX_ERR(0, 150, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_DirectoryPartitioning.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_DirectoryPartitioning.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_DirectoryPartitioning.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_DirectoryPartitioning.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_DirectoryPartitioning.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_DirectoryPartitioning) < 0) __PYX_ERR(0, 150, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DirectoryPartitioning, (PyObject *)&__pyx_type_7pyarrow_8_dataset_DirectoryPartitioning) < 0) __PYX_ERR(0, 150, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_DirectoryPartitioning) < 0) __PYX_ERR(0, 150, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning = &__pyx_type_7pyarrow_8_dataset_DirectoryPartitioning;
  __pyx_vtabptr_7pyarrow_8_dataset_HivePartitioning = &__pyx_vtable_7pyarrow_8_dataset_HivePartitioning;
  __pyx_vtable_7pyarrow_8_dataset_HivePartitioning.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Partitioning;
  __pyx_vtable_7pyarrow_8_dataset_HivePartitioning.__pyx_base.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_dataset_Partitioning *, std::shared_ptr<arrow::dataset::Partitioning>  const &))__pyx_f_7pyarrow_8_dataset_16HivePartitioning_init;
  __pyx_type_7pyarrow_8_dataset_HivePartitioning.tp_base = __pyx_ptype_7pyarrow_8_dataset_Partitioning;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_HivePartitioning) < 0) __PYX_ERR(0, 215, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_HivePartitioning.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_HivePartitioning.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_HivePartitioning.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_HivePartitioning.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_HivePartitioning.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_HivePartitioning) < 0) __PYX_ERR(0, 215, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HivePartitioning, (PyObject *)&__pyx_type_7pyarrow_8_dataset_HivePartitioning) < 0) __PYX_ERR(0, 215, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_HivePartitioning) < 0) __PYX_ERR(0, 215, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_HivePartitioning = &__pyx_type_7pyarrow_8_dataset_HivePartitioning;
  __pyx_vtabptr_7pyarrow_8_dataset_FileSystemFactoryOptions = &__pyx_vtable_7pyarrow_8_dataset_FileSystemFactoryOptions;
  __pyx_vtable_7pyarrow_8_dataset_FileSystemFactoryOptions.unwrap = (arrow::dataset::FileSystemFactoryOptions (*)(struct __pyx_obj_7pyarrow_8_dataset_FileSystemFactoryOptions *))__pyx_f_7pyarrow_8_dataset_24FileSystemFactoryOptions_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions) < 0) __PYX_ERR(0, 279, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_FileSystemFactoryOptions) < 0) __PYX_ERR(0, 279, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FileSystemFactoryOptions, (PyObject *)&__pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions) < 0) __PYX_ERR(0, 279, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions) < 0) __PYX_ERR(0, 279, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_FileSystemFactoryOptions = &__pyx_type_7pyarrow_8_dataset_FileSystemFactoryOptions;
  __pyx_vtabptr_7pyarrow_8_dataset_SourceFactory = &__pyx_vtable_7pyarrow_8_dataset_SourceFactory;
  __pyx_vtable_7pyarrow_8_dataset_SourceFactory.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *, std::shared_ptr<arrow::dataset::SourceFactory>  &))__pyx_f_7pyarrow_8_dataset_13SourceFactory_init;
  __pyx_vtable_7pyarrow_8_dataset_SourceFactory.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::SourceFactory>  &))__pyx_f_7pyarrow_8_dataset_13SourceFactory_wrap;
  __pyx_vtable_7pyarrow_8_dataset_SourceFactory.unwrap = (std::shared_ptr<arrow::dataset::SourceFactory>  (*)(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *))__pyx_f_7pyarrow_8_dataset_13SourceFactory_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_SourceFactory) < 0) __PYX_ERR(0, 384, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_SourceFactory.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_SourceFactory.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_SourceFactory.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_SourceFactory.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_SourceFactory.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_SourceFactory) < 0) __PYX_ERR(0, 384, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SourceFactory, (PyObject *)&__pyx_type_7pyarrow_8_dataset_SourceFactory) < 0) __PYX_ERR(0, 384, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_SourceFactory) < 0) __PYX_ERR(0, 384, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_SourceFactory = &__pyx_type_7pyarrow_8_dataset_SourceFactory;
  __pyx_vtabptr_7pyarrow_8_dataset_FileSystemSourceFactory = &__pyx_vtable_7pyarrow_8_dataset_FileSystemSourceFactory;
  __pyx_vtable_7pyarrow_8_dataset_FileSystemSourceFactory.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_SourceFactory;
  __pyx_vtable_7pyarrow_8_dataset_FileSystemSourceFactory.__pyx_base.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_dataset_SourceFactory *, std::shared_ptr<arrow::dataset::SourceFactory>  &))__pyx_f_7pyarrow_8_dataset_23FileSystemSourceFactory_init;
  __pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory.tp_base = __pyx_ptype_7pyarrow_8_dataset_SourceFactory;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory) < 0) __PYX_ERR(0, 474, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_FileSystemSourceFactory) < 0) __PYX_ERR(0, 474, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FileSystemSourceFactory, (PyObject *)&__pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory) < 0) __PYX_ERR(0, 474, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory) < 0) __PYX_ERR(0, 474, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_FileSystemSourceFactory = &__pyx_type_7pyarrow_8_dataset_FileSystemSourceFactory;
  __pyx_vtabptr_7pyarrow_8_dataset_Source = &__pyx_vtable_7pyarrow_8_dataset_Source;
  __pyx_vtable_7pyarrow_8_dataset_Source.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Source *, std::shared_ptr<arrow::dataset::Source>  const &))__pyx_f_7pyarrow_8_dataset_6Source_init;
  __pyx_vtable_7pyarrow_8_dataset_Source.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::Source>  &))__pyx_f_7pyarrow_8_dataset_6Source_wrap;
  __pyx_vtable_7pyarrow_8_dataset_Source.unwrap = (std::shared_ptr<arrow::dataset::Source>  (*)(struct __pyx_obj_7pyarrow_8_dataset_Source *))__pyx_f_7pyarrow_8_dataset_6Source_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_Source) < 0) __PYX_ERR(0, 538, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_Source.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_Source.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_Source.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_Source.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_Source.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_Source) < 0) __PYX_ERR(0, 538, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Source, (PyObject *)&__pyx_type_7pyarrow_8_dataset_Source) < 0) __PYX_ERR(0, 538, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_Source) < 0) __PYX_ERR(0, 538, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_Source = &__pyx_type_7pyarrow_8_dataset_Source;
  __pyx_vtabptr_7pyarrow_8_dataset_TreeSource = &__pyx_vtable_7pyarrow_8_dataset_TreeSource;
  __pyx_vtable_7pyarrow_8_dataset_TreeSource.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Source;
  __pyx_vtable_7pyarrow_8_dataset_TreeSource.__pyx_base.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Source *, std::shared_ptr<arrow::dataset::Source>  const &))__pyx_f_7pyarrow_8_dataset_10TreeSource_init;
  __pyx_type_7pyarrow_8_dataset_TreeSource.tp_base = __pyx_ptype_7pyarrow_8_dataset_Source;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_TreeSource) < 0) __PYX_ERR(0, 591, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_TreeSource.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_TreeSource.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_TreeSource.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_TreeSource.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_TreeSource.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_TreeSource) < 0) __PYX_ERR(0, 591, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_TreeSource, (PyObject *)&__pyx_type_7pyarrow_8_dataset_TreeSource) < 0) __PYX_ERR(0, 591, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_TreeSource) < 0) __PYX_ERR(0, 591, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_TreeSource = &__pyx_type_7pyarrow_8_dataset_TreeSource;
  __pyx_vtabptr_7pyarrow_8_dataset_FileSystemSource = &__pyx_vtable_7pyarrow_8_dataset_FileSystemSource;
  __pyx_vtable_7pyarrow_8_dataset_FileSystemSource.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Source;
  __pyx_vtable_7pyarrow_8_dataset_FileSystemSource.__pyx_base.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Source *, std::shared_ptr<arrow::dataset::Source>  const &))__pyx_f_7pyarrow_8_dataset_16FileSystemSource_init;
  __pyx_type_7pyarrow_8_dataset_FileSystemSource.tp_base = __pyx_ptype_7pyarrow_8_dataset_Source;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_FileSystemSource) < 0) __PYX_ERR(0, 615, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_FileSystemSource.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_FileSystemSource.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_FileSystemSource.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_FileSystemSource.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_7pyarrow_8_dataset_FileSystemSource, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 615, __pyx_L1_error)
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyarrow_8_dataset_16FileSystemSource___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyarrow_8_dataset_16FileSystemSource___init__.doc = __pyx_doc_7pyarrow_8_dataset_16FileSystemSource___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyarrow_8_dataset_16FileSystemSource___init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_FileSystemSource.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_FileSystemSource) < 0) __PYX_ERR(0, 615, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FileSystemSource, (PyObject *)&__pyx_type_7pyarrow_8_dataset_FileSystemSource) < 0) __PYX_ERR(0, 615, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_FileSystemSource) < 0) __PYX_ERR(0, 615, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_FileSystemSource = &__pyx_type_7pyarrow_8_dataset_FileSystemSource;
  __pyx_vtabptr_7pyarrow_8_dataset_DatasetFactory = &__pyx_vtable_7pyarrow_8_dataset_DatasetFactory;
  __pyx_vtable_7pyarrow_8_dataset_DatasetFactory.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *, std::shared_ptr<arrow::dataset::DatasetFactory>  const &))__pyx_f_7pyarrow_8_dataset_14DatasetFactory_init;
  __pyx_vtable_7pyarrow_8_dataset_DatasetFactory.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::DatasetFactory>  &))__pyx_f_7pyarrow_8_dataset_14DatasetFactory_wrap;
  __pyx_vtable_7pyarrow_8_dataset_DatasetFactory.unwrap = (std::shared_ptr<arrow::dataset::DatasetFactory>  (*)(struct __pyx_obj_7pyarrow_8_dataset_DatasetFactory *))__pyx_f_7pyarrow_8_dataset_14DatasetFactory_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_DatasetFactory) < 0) __PYX_ERR(0, 680, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_DatasetFactory.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_DatasetFactory.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_DatasetFactory.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_DatasetFactory.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_DatasetFactory.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_DatasetFactory) < 0) __PYX_ERR(0, 680, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DatasetFactory, (PyObject *)&__pyx_type_7pyarrow_8_dataset_DatasetFactory) < 0) __PYX_ERR(0, 680, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_DatasetFactory) < 0) __PYX_ERR(0, 680, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_DatasetFactory = &__pyx_type_7pyarrow_8_dataset_DatasetFactory;
  __pyx_vtabptr_7pyarrow_8_dataset_Dataset = &__pyx_vtable_7pyarrow_8_dataset_Dataset;
  __pyx_vtable_7pyarrow_8_dataset_Dataset.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Dataset *, std::shared_ptr<arrow::dataset::Dataset>  const &))__pyx_f_7pyarrow_8_dataset_7Dataset_init;
  __pyx_vtable_7pyarrow_8_dataset_Dataset.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::Dataset>  &))__pyx_f_7pyarrow_8_dataset_7Dataset_wrap;
  __pyx_vtable_7pyarrow_8_dataset_Dataset.unwrap = (std::shared_ptr<arrow::dataset::Dataset>  (*)(struct __pyx_obj_7pyarrow_8_dataset_Dataset *))__pyx_f_7pyarrow_8_dataset_7Dataset_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_Dataset) < 0) __PYX_ERR(0, 744, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_Dataset.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_Dataset.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_Dataset.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_Dataset.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #if CYTHON_COMPILING_IN_CPYTHON
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)&__pyx_type_7pyarrow_8_dataset_Dataset, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 744, __pyx_L1_error)
    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
      __pyx_wrapperbase_7pyarrow_8_dataset_7Dataset___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7pyarrow_8_dataset_7Dataset___init__.doc = __pyx_doc_7pyarrow_8_dataset_7Dataset___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7pyarrow_8_dataset_7Dataset___init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_Dataset.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_Dataset) < 0) __PYX_ERR(0, 744, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Dataset, (PyObject *)&__pyx_type_7pyarrow_8_dataset_Dataset) < 0) __PYX_ERR(0, 744, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_Dataset) < 0) __PYX_ERR(0, 744, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_Dataset = &__pyx_type_7pyarrow_8_dataset_Dataset;
  __pyx_vtabptr_7pyarrow_8_dataset_ScanTask = &__pyx_vtable_7pyarrow_8_dataset_ScanTask;
  __pyx_vtable_7pyarrow_8_dataset_ScanTask.init = (PyObject *(*)(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *, std::shared_ptr< arrow::dataset::ScanTask>  &))__pyx_f_7pyarrow_8_dataset_8ScanTask_init;
  __pyx_vtable_7pyarrow_8_dataset_ScanTask.wrap = (PyObject *(*)(std::shared_ptr< arrow::dataset::ScanTask>  &))__pyx_f_7pyarrow_8_dataset_8ScanTask_wrap;
  __pyx_vtable_7pyarrow_8_dataset_ScanTask.unwrap = (std::shared_ptr< arrow::dataset::ScanTask>  (*)(struct __pyx_obj_7pyarrow_8_dataset_ScanTask *))__pyx_f_7pyarrow_8_dataset_8ScanTask_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_ScanTask) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_ScanTask.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_ScanTask.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_ScanTask.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_ScanTask.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_ScanTask.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_ScanTask) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ScanTask, (PyObject *)&__pyx_type_7pyarrow_8_dataset_ScanTask) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_ScanTask) < 0) __PYX_ERR(0, 919, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_ScanTask = &__pyx_type_7pyarrow_8_dataset_ScanTask;
  __pyx_vtabptr_7pyarrow_8_dataset_Scanner = &__pyx_vtable_7pyarrow_8_dataset_Scanner;
  __pyx_vtable_7pyarrow_8_dataset_Scanner.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Scanner *, std::shared_ptr<arrow::dataset::Scanner>  &))__pyx_f_7pyarrow_8_dataset_7Scanner_init;
  __pyx_vtable_7pyarrow_8_dataset_Scanner.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::Scanner>  &))__pyx_f_7pyarrow_8_dataset_7Scanner_wrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_Scanner) < 0) __PYX_ERR(0, 971, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_Scanner.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_Scanner.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_Scanner.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_Scanner.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_Scanner.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_Scanner) < 0) __PYX_ERR(0, 971, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Scanner, (PyObject *)&__pyx_type_7pyarrow_8_dataset_Scanner) < 0) __PYX_ERR(0, 971, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_Scanner) < 0) __PYX_ERR(0, 971, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_Scanner = &__pyx_type_7pyarrow_8_dataset_Scanner;
  __pyx_vtabptr_7pyarrow_8_dataset_Expression = &__pyx_vtable_7pyarrow_8_dataset_Expression;
  __pyx_vtable_7pyarrow_8_dataset_Expression.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Expression *, std::shared_ptr<arrow::dataset::Expression>  const &))__pyx_f_7pyarrow_8_dataset_10Expression_init;
  __pyx_vtable_7pyarrow_8_dataset_Expression.wrap = (PyObject *(*)(std::shared_ptr<arrow::dataset::Expression>  const &))__pyx_f_7pyarrow_8_dataset_10Expression_wrap;
  __pyx_vtable_7pyarrow_8_dataset_Expression.unwrap = (std::shared_ptr<arrow::dataset::Expression>  (*)(struct __pyx_obj_7pyarrow_8_dataset_Expression *))__pyx_f_7pyarrow_8_dataset_10Expression_unwrap;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_Expression) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_Expression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_Expression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_Expression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_Expression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_Expression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_Expression) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Expression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_Expression) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_Expression) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_Expression = &__pyx_type_7pyarrow_8_dataset_Expression;
  __pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression = &__pyx_vtable_7pyarrow_8_dataset_UnaryExpression;
  __pyx_vtable_7pyarrow_8_dataset_UnaryExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Expression;
  __pyx_vtable_7pyarrow_8_dataset_UnaryExpression.__pyx_base.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Expression *, std::shared_ptr<arrow::dataset::Expression>  const &))__pyx_f_7pyarrow_8_dataset_15UnaryExpression_init;
  __pyx_type_7pyarrow_8_dataset_UnaryExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_Expression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_UnaryExpression) < 0) __PYX_ERR(0, 1236, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_UnaryExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_UnaryExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_UnaryExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_UnaryExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_UnaryExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression) < 0) __PYX_ERR(0, 1236, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_UnaryExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_UnaryExpression) < 0) __PYX_ERR(0, 1236, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_UnaryExpression) < 0) __PYX_ERR(0, 1236, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_UnaryExpression = &__pyx_type_7pyarrow_8_dataset_UnaryExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_BinaryExpression = &__pyx_vtable_7pyarrow_8_dataset_BinaryExpression;
  __pyx_vtable_7pyarrow_8_dataset_BinaryExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Expression;
  __pyx_vtable_7pyarrow_8_dataset_BinaryExpression.__pyx_base.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Expression *, std::shared_ptr<arrow::dataset::Expression>  const &))__pyx_f_7pyarrow_8_dataset_16BinaryExpression_init;
  __pyx_type_7pyarrow_8_dataset_BinaryExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_Expression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_BinaryExpression) < 0) __PYX_ERR(0, 1245, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_BinaryExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_BinaryExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_BinaryExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_BinaryExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_BinaryExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_BinaryExpression) < 0) __PYX_ERR(0, 1245, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BinaryExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_BinaryExpression) < 0) __PYX_ERR(0, 1245, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_BinaryExpression) < 0) __PYX_ERR(0, 1245, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_BinaryExpression = &__pyx_type_7pyarrow_8_dataset_BinaryExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_ScalarExpression = &__pyx_vtable_7pyarrow_8_dataset_ScalarExpression;
  __pyx_vtable_7pyarrow_8_dataset_ScalarExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Expression;
  __pyx_vtable_7pyarrow_8_dataset_ScalarExpression.__pyx_base.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Expression *, std::shared_ptr<arrow::dataset::Expression>  const &))__pyx_f_7pyarrow_8_dataset_16ScalarExpression_init;
  __pyx_type_7pyarrow_8_dataset_ScalarExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_Expression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_ScalarExpression) < 0) __PYX_ERR(0, 1262, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_ScalarExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_ScalarExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_ScalarExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_ScalarExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_ScalarExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_ScalarExpression) < 0) __PYX_ERR(0, 1262, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ScalarExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_ScalarExpression) < 0) __PYX_ERR(0, 1262, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_ScalarExpression) < 0) __PYX_ERR(0, 1262, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_ScalarExpression = &__pyx_type_7pyarrow_8_dataset_ScalarExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_FieldExpression = &__pyx_vtable_7pyarrow_8_dataset_FieldExpression;
  __pyx_vtable_7pyarrow_8_dataset_FieldExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_Expression;
  __pyx_vtable_7pyarrow_8_dataset_FieldExpression.__pyx_base.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Expression *, std::shared_ptr<arrow::dataset::Expression>  const &))__pyx_f_7pyarrow_8_dataset_15FieldExpression_init;
  __pyx_type_7pyarrow_8_dataset_FieldExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_Expression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_FieldExpression) < 0) __PYX_ERR(0, 1290, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_FieldExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_FieldExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_FieldExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_FieldExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_FieldExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_FieldExpression) < 0) __PYX_ERR(0, 1290, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FieldExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_FieldExpression) < 0) __PYX_ERR(0, 1290, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_FieldExpression) < 0) __PYX_ERR(0, 1290, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_FieldExpression = &__pyx_type_7pyarrow_8_dataset_FieldExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_ComparisonExpression = &__pyx_vtable_7pyarrow_8_dataset_ComparisonExpression;
  __pyx_vtable_7pyarrow_8_dataset_ComparisonExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_BinaryExpression;
  __pyx_vtable_7pyarrow_8_dataset_ComparisonExpression.__pyx_base.__pyx_base.init = (void (*)(struct __pyx_obj_7pyarrow_8_dataset_Expression *, std::shared_ptr<arrow::dataset::Expression>  const &))__pyx_f_7pyarrow_8_dataset_20ComparisonExpression_init;
  __pyx_type_7pyarrow_8_dataset_ComparisonExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_BinaryExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_ComparisonExpression) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_ComparisonExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_ComparisonExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_ComparisonExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_ComparisonExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_ComparisonExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_ComparisonExpression) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ComparisonExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_ComparisonExpression) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_ComparisonExpression) < 0) __PYX_ERR(0, 1318, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_ComparisonExpression = &__pyx_type_7pyarrow_8_dataset_ComparisonExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_IsValidExpression = &__pyx_vtable_7pyarrow_8_dataset_IsValidExpression;
  __pyx_vtable_7pyarrow_8_dataset_IsValidExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression;
  __pyx_type_7pyarrow_8_dataset_IsValidExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_UnaryExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_IsValidExpression) < 0) __PYX_ERR(0, 1342, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_IsValidExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_IsValidExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_IsValidExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_IsValidExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_IsValidExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_IsValidExpression) < 0) __PYX_ERR(0, 1342, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_IsValidExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_IsValidExpression) < 0) __PYX_ERR(0, 1342, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_IsValidExpression) < 0) __PYX_ERR(0, 1342, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_IsValidExpression = &__pyx_type_7pyarrow_8_dataset_IsValidExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_CastExpression = &__pyx_vtable_7pyarrow_8_dataset_CastExpression;
  __pyx_vtable_7pyarrow_8_dataset_CastExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression;
  __pyx_type_7pyarrow_8_dataset_CastExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_UnaryExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_CastExpression) < 0) __PYX_ERR(0, 1350, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_CastExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_CastExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_CastExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_CastExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_CastExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_CastExpression) < 0) __PYX_ERR(0, 1350, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CastExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_CastExpression) < 0) __PYX_ERR(0, 1350, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_CastExpression) < 0) __PYX_ERR(0, 1350, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_CastExpression = &__pyx_type_7pyarrow_8_dataset_CastExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_InExpression = &__pyx_vtable_7pyarrow_8_dataset_InExpression;
  __pyx_vtable_7pyarrow_8_dataset_InExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression;
  __pyx_type_7pyarrow_8_dataset_InExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_UnaryExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_InExpression) < 0) __PYX_ERR(0, 1368, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_InExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_InExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_InExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_InExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_InExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_InExpression) < 0) __PYX_ERR(0, 1368, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_InExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_InExpression) < 0) __PYX_ERR(0, 1368, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_InExpression) < 0) __PYX_ERR(0, 1368, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_InExpression = &__pyx_type_7pyarrow_8_dataset_InExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_NotExpression = &__pyx_vtable_7pyarrow_8_dataset_NotExpression;
  __pyx_vtable_7pyarrow_8_dataset_NotExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_UnaryExpression;
  __pyx_type_7pyarrow_8_dataset_NotExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_UnaryExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_NotExpression) < 0) __PYX_ERR(0, 1378, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_NotExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_NotExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_NotExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_NotExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_NotExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_NotExpression) < 0) __PYX_ERR(0, 1378, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_NotExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_NotExpression) < 0) __PYX_ERR(0, 1378, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_NotExpression) < 0) __PYX_ERR(0, 1378, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_NotExpression = &__pyx_type_7pyarrow_8_dataset_NotExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_AndExpression = &__pyx_vtable_7pyarrow_8_dataset_AndExpression;
  __pyx_vtable_7pyarrow_8_dataset_AndExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_BinaryExpression;
  __pyx_type_7pyarrow_8_dataset_AndExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_BinaryExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_AndExpression) < 0) __PYX_ERR(0, 1386, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_AndExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_AndExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_AndExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_AndExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_AndExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_AndExpression) < 0) __PYX_ERR(0, 1386, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_AndExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_AndExpression) < 0) __PYX_ERR(0, 1386, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_AndExpression) < 0) __PYX_ERR(0, 1386, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_AndExpression = &__pyx_type_7pyarrow_8_dataset_AndExpression;
  __pyx_vtabptr_7pyarrow_8_dataset_OrExpression = &__pyx_vtable_7pyarrow_8_dataset_OrExpression;
  __pyx_vtable_7pyarrow_8_dataset_OrExpression.__pyx_base = *__pyx_vtabptr_7pyarrow_8_dataset_BinaryExpression;
  __pyx_type_7pyarrow_8_dataset_OrExpression.tp_base = __pyx_ptype_7pyarrow_8_dataset_BinaryExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset_OrExpression) < 0) __PYX_ERR(0, 1400, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset_OrExpression.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset_OrExpression.tp_dictoffset && __pyx_type_7pyarrow_8_dataset_OrExpression.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset_OrExpression.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_7pyarrow_8_dataset_OrExpression.tp_dict, __pyx_vtabptr_7pyarrow_8_dataset_OrExpression) < 0) __PYX_ERR(0, 1400, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_OrExpression, (PyObject *)&__pyx_type_7pyarrow_8_dataset_OrExpression) < 0) __PYX_ERR(0, 1400, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7pyarrow_8_dataset_OrExpression) < 0) __PYX_ERR(0, 1400, __pyx_L1_error)
  __pyx_ptype_7pyarrow_8_dataset_OrExpression = &__pyx_type_7pyarrow_8_dataset_OrExpression;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset___pyx_scope_struct__to_batches) < 0) __PYX_ERR(0, 832, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset___pyx_scope_struct__to_batches.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset___pyx_scope_struct__to_batches.tp_dictoffset && __pyx_type_7pyarrow_8_dataset___pyx_scope_struct__to_batches.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset___pyx_scope_struct__to_batches.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct__to_batches = &__pyx_type_7pyarrow_8_dataset___pyx_scope_struct__to_batches;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset___pyx_scope_struct_1_execute) < 0) __PYX_ERR(0, 945, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_1_execute.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset___pyx_scope_struct_1_execute.tp_dictoffset && __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_1_execute.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_1_execute.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct_1_execute = &__pyx_type_7pyarrow_8_dataset___pyx_scope_struct_1_execute;
  if (PyType_Ready(&__pyx_type_7pyarrow_8_dataset___pyx_scope_struct_2_scan) < 0) __PYX_ERR(0, 1054, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_2_scan.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7pyarrow_8_dataset___pyx_scope_struct_2_scan.tp_dictoffset && __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_2_scan.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_7pyarrow_8_dataset___pyx_scope_struct_2_scan.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_7pyarrow_8_dataset___pyx_scope_struct_2_scan = &__pyx_type_7pyarrow_8_dataset___pyx_scope_struct_2_scan;
  __Pyx_EnumMeta.tp_base = (&PyType_Type);
  if (PyType_Ready(&__Pyx_EnumMeta) < 0) __PYX_ERR(1, 15, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __Pyx_EnumMeta.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__Pyx_EnumMeta.tp_dictoffset && __Pyx_EnumMeta.tp_getattro == PyObject_GenericGetAttr)) {
    __Pyx_EnumMeta.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_setup_reduce((PyObject*)&__Pyx_EnumMeta) < 0) __PYX_ERR(1, 15, __pyx_L1_error)
  __pyx_ptype___Pyx_EnumMeta = &__Pyx_EnumMeta;
  __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(3, 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(3, 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(4, 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(4, 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(5, 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(5, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("datetime"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_7cpython_8datetime_date = __Pyx_ImportType(__pyx_t_1, "datetime", "date", sizeof(PyDateTime_Date), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_8datetime_date) __PYX_ERR(2, 9, __pyx_L1_error)
  __pyx_ptype_7cpython_8datetime_time = __Pyx_ImportType(__pyx_t_1, "datetime", "time", sizeof(PyDateTime_Time), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_8datetime_time) __PYX_ERR(2, 12, __pyx_L1_error)
  __pyx_ptype_7cpython_8datetime_datetime = __Pyx_ImportType(__pyx_t_1, "datetime", "datetime", sizeof(PyDateTime_DateTime), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_8datetime_datetime) __PYX_ERR(2, 15, __pyx_L1_error)
  __pyx_ptype_7cpython_8datetime_timedelta = __Pyx_ImportType(__pyx_t_1, "datetime", "timedelta", sizeof(PyDateTime_Delta), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_8datetime_timedelta) __PYX_ERR(2, 18, __pyx_L1_error)
  __pyx_ptype_7cpython_8datetime_tzinfo = __Pyx_ImportType(__pyx_t_1, "datetime", "tzinfo", sizeof(PyDateTime_TZInfo), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_8datetime_tzinfo) __PYX_ERR(2, 21, __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(6, 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(6, 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(6, 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(6, 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(6, 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(6, 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(6, 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(6, 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(6, 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(6, 67, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_MapType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "MapType", sizeof(struct __pyx_obj_7pyarrow_3lib_MapType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_MapType) __PYX_ERR(6, 72, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_MapType = (struct __pyx_vtabstruct_7pyarrow_3lib_MapType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_MapType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_MapType)) __PYX_ERR(6, 72, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FixedSizeListType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FixedSizeListType", sizeof(struct __pyx_obj_7pyarrow_3lib_FixedSizeListType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FixedSizeListType) __PYX_ERR(6, 77, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FixedSizeListType = (struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FixedSizeListType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FixedSizeListType)) __PYX_ERR(6, 77, __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(6, 82, __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(6, 82, __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(6, 90, __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(6, 98, __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(6, 98, __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(6, 103, __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(6, 103, __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(6, 108, __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(6, 108, __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(6, 113, __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(6, 113, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_DurationType = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "DurationType", sizeof(struct __pyx_obj_7pyarrow_3lib_DurationType), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_DurationType) __PYX_ERR(6, 118, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_DurationType = (struct __pyx_vtabstruct_7pyarrow_3lib_DurationType*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_DurationType->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_DurationType)) __PYX_ERR(6, 118, __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(6, 123, __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(6, 123, __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(6, 128, __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(6, 128, __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(6, 133, __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(6, 133, __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(6, 138, __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(6, 138, __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(6, 143, __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(6, 143, __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(6, 147, __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(6, 147, __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(6, 158, __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(6, 158, __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(6, 167, __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(6, 172, __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(6, 176, __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(6, 176, __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(6, 186, __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(6, 186, __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(6, 192, __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(6, 192, __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(6, 196, __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(6, 196, __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(6, 200, __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(6, 200, __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(6, 211, __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(6, 211, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_MapValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "MapValue", sizeof(struct __pyx_obj_7pyarrow_3lib_MapValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_MapValue) __PYX_ERR(6, 222, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_MapValue = (struct __pyx_vtabstruct_7pyarrow_3lib_MapValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_MapValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_MapValue)) __PYX_ERR(6, 222, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FixedSizeListValue = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FixedSizeListValue", sizeof(struct __pyx_obj_7pyarrow_3lib_FixedSizeListValue), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FixedSizeListValue) __PYX_ERR(6, 234, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FixedSizeListValue = (struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListValue*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FixedSizeListValue->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FixedSizeListValue)) __PYX_ERR(6, 234, __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(6, 245, __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(6, 245, __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(6, 250, __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(6, 250, __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(6, 258, __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(6, 258, __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(6, 262, __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(6, 262, __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(6, 266, __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(6, 270, __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(6, 270, __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(6, 286, __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(6, 286, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_SparseCSRMatrix = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "SparseCSRMatrix", sizeof(struct __pyx_obj_7pyarrow_3lib_SparseCSRMatrix), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_SparseCSRMatrix) __PYX_ERR(6, 297, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_SparseCSRMatrix = (struct __pyx_vtabstruct_7pyarrow_3lib_SparseCSRMatrix*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_SparseCSRMatrix->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_SparseCSRMatrix)) __PYX_ERR(6, 297, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_SparseCOOTensor = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "SparseCOOTensor", sizeof(struct __pyx_obj_7pyarrow_3lib_SparseCOOTensor), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_SparseCOOTensor) __PYX_ERR(6, 308, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_SparseCOOTensor = (struct __pyx_vtabstruct_7pyarrow_3lib_SparseCOOTensor*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_SparseCOOTensor->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_SparseCOOTensor)) __PYX_ERR(6, 308, __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(6, 319, __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(6, 319, __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(6, 323, __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(6, 323, __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(6, 327, __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(6, 327, __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(6, 331, __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(6, 331, __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(6, 335, __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(6, 335, __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(6, 339, __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(6, 339, __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(6, 343, __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(6, 343, __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(6, 347, __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(6, 347, __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(6, 351, __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(6, 351, __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(6, 355, __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(6, 355, __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(6, 359, __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(6, 359, __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(6, 363, __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(6, 363, __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(6, 367, __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(6, 367, __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(6, 371, __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(6, 371, __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(6, 375, __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(6, 375, __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(6, 379, __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(6, 379, __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(6, 383, __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(6, 383, __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(6, 387, __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(6, 387, __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(6, 391, __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(6, 391, __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(6, 395, __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(6, 395, __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(6, 399, __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(6, 399, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_MapArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "MapArray", sizeof(struct __pyx_obj_7pyarrow_3lib_MapArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_MapArray) __PYX_ERR(6, 403, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_MapArray = (struct __pyx_vtabstruct_7pyarrow_3lib_MapArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_MapArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_MapArray)) __PYX_ERR(6, 403, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_FixedSizeListArray = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "FixedSizeListArray", sizeof(struct __pyx_obj_7pyarrow_3lib_FixedSizeListArray), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_FixedSizeListArray) __PYX_ERR(6, 407, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_FixedSizeListArray = (struct __pyx_vtabstruct_7pyarrow_3lib_FixedSizeListArray*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_FixedSizeListArray->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_FixedSizeListArray)) __PYX_ERR(6, 407, __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(6, 411, __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(6, 411, __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(6, 415, __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(6, 415, __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(6, 419, __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(6, 419, __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(6, 423, __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(6, 423, __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(6, 428, __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(6, 428, __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(6, 439, __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(6, 439, __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(6, 452, __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(6, 452, __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(6, 460, __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(6, 460, __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(6, 469, __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(6, 469, __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(6, 479, __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(6, 479, __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(6, 484, __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(6, 484, __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(6, 508, __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(6, 508, __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(6, 512, __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(6, 512, __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(6, 516, __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(6, 516, __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(6, 520, __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(6, 520, __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(6, 524, __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(6, 529, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3lib_CastOptions = __Pyx_ImportType(__pyx_t_1, "pyarrow.lib", "CastOptions", sizeof(struct __pyx_obj_7pyarrow_3lib_CastOptions), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3lib_CastOptions) __PYX_ERR(6, 534, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3lib_CastOptions = (struct __pyx_vtabstruct_7pyarrow_3lib_CastOptions*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3lib_CastOptions->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3lib_CastOptions)) __PYX_ERR(6, 534, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("pyarrow._fs"); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_7pyarrow_3_fs_FileStats = __Pyx_ImportType(__pyx_t_1, "pyarrow._fs", "FileStats", sizeof(struct __pyx_obj_7pyarrow_3_fs_FileStats), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3_fs_FileStats) __PYX_ERR(7, 37, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3_fs_FileStats = (struct __pyx_vtabstruct_7pyarrow_3_fs_FileStats*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3_fs_FileStats->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3_fs_FileStats)) __PYX_ERR(7, 37, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3_fs_FileSelector = __Pyx_ImportType(__pyx_t_1, "pyarrow._fs", "FileSelector", sizeof(struct __pyx_obj_7pyarrow_3_fs_FileSelector), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3_fs_FileSelector) __PYX_ERR(7, 47, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3_fs_FileSelector = (struct __pyx_vtabstruct_7pyarrow_3_fs_FileSelector*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3_fs_FileSelector->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3_fs_FileSelector)) __PYX_ERR(7, 47, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3_fs_FileSystem = __Pyx_ImportType(__pyx_t_1, "pyarrow._fs", "FileSystem", sizeof(struct __pyx_obj_7pyarrow_3_fs_FileSystem), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3_fs_FileSystem) __PYX_ERR(7, 54, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3_fs_FileSystem = (struct __pyx_vtabstruct_7pyarrow_3_fs_FileSystem*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3_fs_FileSystem->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3_fs_FileSystem)) __PYX_ERR(7, 54, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3_fs_LocalFileSystem = __Pyx_ImportType(__pyx_t_1, "pyarrow._fs", "LocalFileSystem", sizeof(struct __pyx_obj_7pyarrow_3_fs_LocalFileSystem), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3_fs_LocalFileSystem) __PYX_ERR(7, 67, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3_fs_LocalFileSystem = (struct __pyx_vtabstruct_7pyarrow_3_fs_LocalFileSystem*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3_fs_LocalFileSystem->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3_fs_LocalFileSystem)) __PYX_ERR(7, 67, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3_fs_SubTreeFileSystem = __Pyx_ImportType(__pyx_t_1, "pyarrow._fs", "SubTreeFileSystem", sizeof(struct __pyx_obj_7pyarrow_3_fs_SubTreeFileSystem), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3_fs_SubTreeFileSystem) __PYX_ERR(7, 74, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3_fs_SubTreeFileSystem = (struct __pyx_vtabstruct_7pyarrow_3_fs_SubTreeFileSystem*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3_fs_SubTreeFileSystem->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3_fs_SubTreeFileSystem)) __PYX_ERR(7, 74, __pyx_L1_error)
  __pyx_ptype_7pyarrow_3_fs__MockFileSystem = __Pyx_ImportType(__pyx_t_1, "pyarrow._fs", "_MockFileSystem", sizeof(struct __pyx_obj_7pyarrow_3_fs__MockFileSystem), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7pyarrow_3_fs__MockFileSystem) __PYX_ERR(7, 81, __pyx_L1_error)
  __pyx_vtabptr_7pyarrow_3_fs__MockFileSystem = (struct __pyx_vtabstruct_7pyarrow_3_fs__MockFileSystem*)__Pyx_GetVtable(__pyx_ptype_7pyarrow_3_fs__MockFileSystem->tp_dict); if (unlikely(!__pyx_vtabptr_7pyarrow_3_fs__MockFileSystem)) __PYX_ERR(7, 81, __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, "ensure_type", (void (**)(void))&__pyx_f_7pyarrow_3lib_ensure_type, "struct __pyx_obj_7pyarrow_3lib_DataType *(PyObject *, struct __pyx_opt_args_7pyarrow_3lib_ensure_type *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_wrap_batch", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_wrap_batch, "PyObject *(std::shared_ptr< arrow::RecordBatch>  const &)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_wrap_data_type", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_wrap_data_type, "PyObject *(std::shared_ptr< arrow::DataType>  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)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_unwrap_array", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_unwrap_array, "std::shared_ptr< arrow::Array>  (PyObject *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_unwrap_data_type", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_unwrap_data_type, "std::shared_ptr< arrow::DataType>  (PyObject *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportFunction(__pyx_t_1, "pyarrow_unwrap_schema", (void (**)(void))&__pyx_f_7pyarrow_3lib_pyarrow_unwrap_schema, "std::shared_ptr< arrow::Schema>  (PyObject *)") < 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_dataset(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC init_dataset(void)
#else
__Pyx_PyMODINIT_FUNC PyInit__dataset(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit__dataset(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__dataset(PyObject *__pyx_pyinit_module)
#endif
#endif
{
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = 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 '_dataset' 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__dataset(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("_dataset", __pyx_methods, __pyx_k_Dataset_is_currently_unstable_AP, 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___dataset) {
    if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __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._dataset")) {
      if (unlikely(PyDict_SetItemString(modules, "pyarrow._dataset", __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/_dataset.pyx":24
 * from __future__ import absolute_import
 * 
 * import six             # <<<<<<<<<<<<<<
 * from cpython.object cimport Py_LT, Py_EQ, Py_GT, Py_LE, Py_NE, Py_GE
 * from cython.operator cimport dereference as deref
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_six, 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_six, __pyx_t_1) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":28
 * from cython.operator cimport dereference as deref
 * 
 * import pyarrow as pa             # <<<<<<<<<<<<<<
 * from pyarrow.lib cimport *
 * from pyarrow.includes.libarrow_dataset cimport *
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_pyarrow, 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_pa, __pyx_t_1) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pyarrow/_dataset.pyx":31
 * from pyarrow.lib cimport *
 * from pyarrow.includes.libarrow_dataset cimport *
 * from pyarrow.compat import frombytes, tobytes             # <<<<<<<<<<<<<<
 * from pyarrow._fs cimport FileSystem, FileStats, FileSelector
 * 
 */
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_frombytes);
  __Pyx_GIVEREF(__pyx_n_s_frombytes);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_frombytes);
  __Pyx_INCREF(__pyx_n_s_tobytes);
  __Pyx_GIVEREF(__pyx_n_s_tobytes);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_tobytes);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pyarrow_compat, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 31, __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_frombytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_frombytes, __pyx_t_1) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
  __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, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_tobytes, __pyx_t_1) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":35
 * 
 * 
 * def _forbid_instantiation(klass, subclasses_instead=True):             # <<<<<<<<<<<<<<
 *     msg = '{} is an abstract class thus cannot be initialized.'.format(
 *         klass.__name__
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyarrow_8_dataset_1_forbid_instantiation, NULL, __pyx_n_s_pyarrow__dataset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_forbid_instantiation, __pyx_t_2) < 0) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.pyx":192
 * 
 *     @staticmethod
 *     def discover(field_names):             # <<<<<<<<<<<<<<
 *         """
 *         Discover a DirectoryPartitioning.
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyarrow_8_dataset_21DirectoryPartitioning_3discover, NULL, __pyx_n_s_pyarrow__dataset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning->tp_dict, __pyx_n_s_discover, __pyx_t_2) < 0) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning);

  /* "pyarrow/_dataset.pyx":191
 *         self.directory_partitioning = <CDirectoryPartitioning*> sp.get()
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def discover(field_names):
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_2, (PyObject *)__pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning, __pyx_n_s_discover); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning->tp_dict, __pyx_n_s_discover, __pyx_t_1) < 0) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_7pyarrow_8_dataset_DirectoryPartitioning);

  /* "pyarrow/_dataset.pyx":263
 * 
 *     @staticmethod
 *     def discover():             # <<<<<<<<<<<<<<
 *         """
 *         Discover a HivePartitioning.
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7pyarrow_8_dataset_16HivePartitioning_3discover, NULL, __pyx_n_s_pyarrow__dataset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyarrow_8_dataset_HivePartitioning->tp_dict, __pyx_n_s_discover, __pyx_t_1) < 0) __PYX_ERR(0, 263, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_7pyarrow_8_dataset_HivePartitioning);

  /* "pyarrow/_dataset.pyx":262
 *         self.hive_partitioning = <CHivePartitioning*> sp.get()
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def discover():
 *         """
 */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_7pyarrow_8_dataset_HivePartitioning, __pyx_n_s_discover); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyarrow_8_dataset_HivePartitioning->tp_dict, __pyx_n_s_discover, __pyx_t_2) < 0) __PYX_ERR(0, 263, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_7pyarrow_8_dataset_HivePartitioning);

  /* "pyarrow/_dataset.pyx":306
 *         CFileSystemFactoryOptions options
 * 
 *     __slots__ = ()  # avoid mistakingly creating attributes             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, partition_base_dir=None, exclude_invalid_files=None,
 */
  if (PyDict_SetItem((PyObject *)__pyx_ptype_7pyarrow_8_dataset_FileSystemFactoryOptions->tp_dict, __pyx_n_s_slots, __pyx_empty_tuple) < 0) __PYX_ERR(0, 306, __pyx_L1_error)
  PyType_Modified(__pyx_ptype_7pyarrow_8_dataset_FileSystemFactoryOptions);

  /* "pyarrow/_dataset.pyx":1095
 * 
 * 
 * def _binop(fn, left, right):             # <<<<<<<<<<<<<<
 *     # cython doesn't support reverse operands like __radd__ just passes the
 *     # arguments in the same order as the binary operator called
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7pyarrow_8_dataset_3_binop, NULL, __pyx_n_s_pyarrow__dataset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_binop, __pyx_t_2) < 0) __PYX_ERR(0, 1095, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pyarrow/_dataset.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;

  /* "EnumBase":9
 * 
 * cdef object __Pyx_OrderedDict
 * if PY_VERSION_HEX >= 0x02070000:             # <<<<<<<<<<<<<<
 *     from collections import OrderedDict as __Pyx_OrderedDict
 * else:
 */
  __pyx_t_3 = ((PY_VERSION_HEX >= 0x02070000) != 0);
  if (__pyx_t_3) {

    /* "EnumBase":10
 * cdef object __Pyx_OrderedDict
 * if PY_VERSION_HEX >= 0x02070000:
 *     from collections import OrderedDict as __Pyx_OrderedDict             # <<<<<<<<<<<<<<
 * else:
 *     __Pyx_OrderedDict = dict
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_OrderedDict);
    __Pyx_GIVEREF(__pyx_n_s_OrderedDict);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_OrderedDict);
    __pyx_t_1 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 10, __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_OrderedDict); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 10, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_XGOTREF(__Pyx_OrderedDict);
    __Pyx_DECREF_SET(__Pyx_OrderedDict, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "EnumBase":9
 * 
 * cdef object __Pyx_OrderedDict
 * if PY_VERSION_HEX >= 0x02070000:             # <<<<<<<<<<<<<<
 *     from collections import OrderedDict as __Pyx_OrderedDict
 * else:
 */
    goto __pyx_L2;
  }

  /* "EnumBase":12
 *     from collections import OrderedDict as __Pyx_OrderedDict
 * else:
 *     __Pyx_OrderedDict = dict             # <<<<<<<<<<<<<<
 * 
 * @cython.internal
 */
  /*else*/ {
    __Pyx_INCREF(((PyObject *)(&PyDict_Type)));
    __Pyx_XGOTREF(__Pyx_OrderedDict);
    __Pyx_DECREF_SET(__Pyx_OrderedDict, ((PyObject *)(&PyDict_Type)));
    __Pyx_GIVEREF(((PyObject *)(&PyDict_Type)));
  }
  __pyx_L2:;

  /* "EnumBase":26
 * 
 * cdef object __Pyx_EnumBase
 * class __Pyx_EnumBase(int):             # <<<<<<<<<<<<<<
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)(&PyInt_Type)));
  __Pyx_GIVEREF(((PyObject *)(&PyInt_Type)));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)(&PyInt_Type)));
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_Pyx_EnumBase, __pyx_n_s_Pyx_EnumBase, (PyObject *) NULL, __pyx_n_s_EnumBase, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "EnumBase":27
 * cdef object __Pyx_EnumBase
 * class __Pyx_EnumBase(int):
 *     __metaclass__ = __Pyx_EnumMeta             # <<<<<<<<<<<<<<
 *     def __new__(cls, value, name=None):
 *         for v in cls:
 */
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_n_s_metaclass, ((PyObject *)__pyx_ptype___Pyx_EnumMeta)) < 0) __PYX_ERR(1, 27, __pyx_L1_error)

  /* "EnumBase":28
 * class __Pyx_EnumBase(int):
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):             # <<<<<<<<<<<<<<
 *         for v in cls:
 *             if v == value:
 */
  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8EnumBase_14__Pyx_EnumBase_1__new__, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_Pyx_EnumBase___new, NULL, __pyx_n_s_EnumBase, __pyx_d, ((PyObject *)__pyx_codeobj__71)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__72);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_n_s_new, __pyx_t_5) < 0) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "EnumBase":39
 *         cls.__members__[name] = res
 *         return res
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):
 */
  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8EnumBase_14__Pyx_EnumBase_3__repr__, 0, __pyx_n_s_Pyx_EnumBase___repr, NULL, __pyx_n_s_EnumBase, __pyx_d, ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_n_s_repr, __pyx_t_5) < 0) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "EnumBase":41
 *     def __repr__(self):
 *         return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
 *     def __str__(self):             # <<<<<<<<<<<<<<
 *         return "%s.%s" % (self.__class__.__name__, self.name)
 * 
 */
  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_8EnumBase_14__Pyx_EnumBase_5__str__, 0, __pyx_n_s_Pyx_EnumBase___str, NULL, __pyx_n_s_EnumBase, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_n_s_str, __pyx_t_5) < 0) __PYX_ERR(1, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "EnumBase":26
 * 
 * cdef object __Pyx_EnumBase
 * class __Pyx_EnumBase(int):             # <<<<<<<<<<<<<<
 *     __metaclass__ = __Pyx_EnumMeta
 *     def __new__(cls, value, name=None):
 */
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_Pyx_EnumBase, __pyx_t_1, __pyx_t_4, NULL, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XGOTREF(__Pyx_EnumBase);
  __Pyx_DECREF_SET(__Pyx_EnumBase, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "EnumBase":44
 *         return "%s.%s" % (self.__class__.__name__, self.name)
 * 
 * if PY_VERSION_HEX >= 0x03040000:             # <<<<<<<<<<<<<<
 *     from enum import IntEnum as __Pyx_EnumBase
 * 
 */
  __pyx_t_3 = ((PY_VERSION_HEX >= 0x03040000) != 0);
  if (__pyx_t_3) {

    /* "EnumBase":45
 * 
 * if PY_VERSION_HEX >= 0x03040000:
 *     from enum import IntEnum as __Pyx_EnumBase             # <<<<<<<<<<<<<<
 * 
 */
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 45, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_IntEnum);
    __Pyx_GIVEREF(__pyx_n_s_IntEnum);
    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_IntEnum);
    __pyx_t_2 = __Pyx_Import(__pyx_n_s_enum, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 45, __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_IntEnum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 45, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_XGOTREF(__Pyx_EnumBase);
    __Pyx_DECREF_SET(__Pyx_EnumBase, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "EnumBase":44
 *         return "%s.%s" % (self.__class__.__name__, self.name)
 * 
 * if PY_VERSION_HEX >= 0x03040000:             # <<<<<<<<<<<<<<
 *     from enum import IntEnum as __Pyx_EnumBase
 * 
 */
  }

  /* "(tree fragment)":1
 * def __pyx_unpickle___Pyx_EnumMeta(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_8EnumBase_1__pyx_unpickle___Pyx_EnumMeta, NULL, __pyx_n_s_EnumBase); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle___Pyx_EnumMeta, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "EnumType":50
 * 
 * 
 * cdef dict __Pyx_globals = globals()             # <<<<<<<<<<<<<<
 * if PY_VERSION_HEX >= 0x03040000:
 * 
 */
  __pyx_t_2 = __Pyx_Globals(); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(1, 50, __pyx_L1_error)
  __Pyx_XGOTREF(__Pyx_globals);
  __Pyx_DECREF_SET(__Pyx_globals, ((PyObject*)__pyx_t_2));
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;

  /* "EnumType":51
 * 
 * cdef dict __Pyx_globals = globals()
 * if PY_VERSION_HEX >= 0x03040000:             # <<<<<<<<<<<<<<
 * 
 *     CompareOperator = __Pyx_EnumBase('CompareOperator', __Pyx_OrderedDict([
 */
  __pyx_t_3 = ((PY_VERSION_HEX >= 0x03040000) != 0);
  if (__pyx_t_3) {

    /* "EnumType":54
 * 
 *     CompareOperator = __Pyx_EnumBase('CompareOperator', __Pyx_OrderedDict([
 *         ('Equal', Equal),             # <<<<<<<<<<<<<<
 *         ('NotEqual', NotEqual),
 *         ('Greater', Greater),
 */
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Equal); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 54, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 54, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_Equal);
    __Pyx_GIVEREF(__pyx_n_s_Equal);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Equal);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "EnumType":55
 *     CompareOperator = __Pyx_EnumBase('CompareOperator', __Pyx_OrderedDict([
 *         ('Equal', Equal),
 *         ('NotEqual', NotEqual),             # <<<<<<<<<<<<<<
 *         ('Greater', Greater),
 *         ('GreaterEqual', GreaterEqual),
 */
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_NotEqual); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 55, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 55, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_n_s_NotEqual);
    __Pyx_GIVEREF(__pyx_n_s_NotEqual);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_NotEqual);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "EnumType":56
 *         ('Equal', Equal),
 *         ('NotEqual', NotEqual),
 *         ('Greater', Greater),             # <<<<<<<<<<<<<<
 *         ('GreaterEqual', GreaterEqual),
 *         ('Less', Less),
 */
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Greater); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 56, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 56, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_n_s_Greater);
    __Pyx_GIVEREF(__pyx_n_s_Greater);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_Greater);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "EnumType":57
 *         ('NotEqual', NotEqual),
 *         ('Greater', Greater),
 *         ('GreaterEqual', GreaterEqual),             # <<<<<<<<<<<<<<
 *         ('Less', Less),
 *         ('LessEqual', LessEqual),
 */
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_GreaterEqual); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_n_s_GreaterEqual);
    __Pyx_GIVEREF(__pyx_n_s_GreaterEqual);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_GreaterEqual);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "EnumType":58
 *         ('Greater', Greater),
 *         ('GreaterEqual', GreaterEqual),
 *         ('Less', Less),             # <<<<<<<<<<<<<<
 *         ('LessEqual', LessEqual),
 *     ]))
 */
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Less); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 58, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 58, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_n_s_Less);
    __Pyx_GIVEREF(__pyx_n_s_Less);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_n_s_Less);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "EnumType":59
 *         ('GreaterEqual', GreaterEqual),
 *         ('Less', Less),
 *         ('LessEqual', LessEqual),             # <<<<<<<<<<<<<<
 *     ]))
 *     __Pyx_globals['Equal'] = CompareOperator.Equal
 */
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_LessEqual); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 59, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 59, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_n_s_LessEqual);
    __Pyx_GIVEREF(__pyx_n_s_LessEqual);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_n_s_LessEqual);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "EnumType":53
 * if PY_VERSION_HEX >= 0x03040000:
 * 
 *     CompareOperator = __Pyx_EnumBase('CompareOperator', __Pyx_OrderedDict([             # <<<<<<<<<<<<<<
 *         ('Equal', Equal),
 *         ('NotEqual', NotEqual),
 */
    __pyx_t_2 = PyList_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_4);
    PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyList_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyList_SET_ITEM(__pyx_t_2, 3, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyList_SET_ITEM(__pyx_t_2, 4, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_8);
    PyList_SET_ITEM(__pyx_t_2, 5, __pyx_t_8);
    __pyx_t_1 = 0;
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_6 = 0;
    __pyx_t_7 = 0;
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_CallOneArg(__Pyx_OrderedDict, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_CompareOperator);
    __Pyx_GIVEREF(__pyx_n_s_CompareOperator);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_CompareOperator);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__Pyx_EnumBase, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_CompareOperator, __pyx_t_8) < 0) __PYX_ERR(1, 53, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "EnumType":61
 *         ('LessEqual', LessEqual),
 *     ]))
 *     __Pyx_globals['Equal'] = CompareOperator.Equal             # <<<<<<<<<<<<<<
 *     __Pyx_globals['NotEqual'] = CompareOperator.NotEqual
 *     __Pyx_globals['Greater'] = CompareOperator.Greater
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 61, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_Equal); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 61, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 61, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_Equal, __pyx_t_2) < 0)) __PYX_ERR(1, 61, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "EnumType":62
 *     ]))
 *     __Pyx_globals['Equal'] = CompareOperator.Equal
 *     __Pyx_globals['NotEqual'] = CompareOperator.NotEqual             # <<<<<<<<<<<<<<
 *     __Pyx_globals['Greater'] = CompareOperator.Greater
 *     __Pyx_globals['GreaterEqual'] = CompareOperator.GreaterEqual
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_NotEqual); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 62, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 62, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_NotEqual, __pyx_t_8) < 0)) __PYX_ERR(1, 62, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "EnumType":63
 *     __Pyx_globals['Equal'] = CompareOperator.Equal
 *     __Pyx_globals['NotEqual'] = CompareOperator.NotEqual
 *     __Pyx_globals['Greater'] = CompareOperator.Greater             # <<<<<<<<<<<<<<
 *     __Pyx_globals['GreaterEqual'] = CompareOperator.GreaterEqual
 *     __Pyx_globals['Less'] = CompareOperator.Less
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 63, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_Greater); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 63, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 63, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_Greater, __pyx_t_2) < 0)) __PYX_ERR(1, 63, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "EnumType":64
 *     __Pyx_globals['NotEqual'] = CompareOperator.NotEqual
 *     __Pyx_globals['Greater'] = CompareOperator.Greater
 *     __Pyx_globals['GreaterEqual'] = CompareOperator.GreaterEqual             # <<<<<<<<<<<<<<
 *     __Pyx_globals['Less'] = CompareOperator.Less
 *     __Pyx_globals['LessEqual'] = CompareOperator.LessEqual
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 64, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_GreaterEqual); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 64, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 64, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_GreaterEqual, __pyx_t_8) < 0)) __PYX_ERR(1, 64, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "EnumType":65
 *     __Pyx_globals['Greater'] = CompareOperator.Greater
 *     __Pyx_globals['GreaterEqual'] = CompareOperator.GreaterEqual
 *     __Pyx_globals['Less'] = CompareOperator.Less             # <<<<<<<<<<<<<<
 *     __Pyx_globals['LessEqual'] = CompareOperator.LessEqual
 * else:
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 65, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_Less); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 65, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 65, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_Less, __pyx_t_2) < 0)) __PYX_ERR(1, 65, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "EnumType":66
 *     __Pyx_globals['GreaterEqual'] = CompareOperator.GreaterEqual
 *     __Pyx_globals['Less'] = CompareOperator.Less
 *     __Pyx_globals['LessEqual'] = CompareOperator.LessEqual             # <<<<<<<<<<<<<<
 * else:
 *     class CompareOperator(__Pyx_EnumBase):
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_LessEqual); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 66, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_LessEqual, __pyx_t_8) < 0)) __PYX_ERR(1, 66, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "EnumType":51
 * 
 * cdef dict __Pyx_globals = globals()
 * if PY_VERSION_HEX >= 0x03040000:             # <<<<<<<<<<<<<<
 * 
 *     CompareOperator = __Pyx_EnumBase('CompareOperator', __Pyx_OrderedDict([
 */
    goto __pyx_L4;
  }

  /* "EnumType":68
 *     __Pyx_globals['LessEqual'] = CompareOperator.LessEqual
 * else:
 *     class CompareOperator(__Pyx_EnumBase):             # <<<<<<<<<<<<<<
 *         pass
 *     __Pyx_globals['Equal'] = CompareOperator(Equal, 'Equal')
 */
  /*else*/ {
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 68, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(__Pyx_EnumBase);
    __Pyx_GIVEREF(__Pyx_EnumBase);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __Pyx_EnumBase);
    __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 68, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_8, __pyx_n_s_CompareOperator, __pyx_n_s_CompareOperator, (PyObject *) NULL, __pyx_n_s_EnumType, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 68, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_CompareOperator, __pyx_t_8, __pyx_t_7, NULL, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 68, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_CompareOperator, __pyx_t_6) < 0) __PYX_ERR(1, 68, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "EnumType":70
 *     class CompareOperator(__Pyx_EnumBase):
 *         pass
 *     __Pyx_globals['Equal'] = CompareOperator(Equal, 'Equal')             # <<<<<<<<<<<<<<
 *     __Pyx_globals['NotEqual'] = CompareOperator(NotEqual, 'NotEqual')
 *     __Pyx_globals['Greater'] = CompareOperator(Greater, 'Greater')
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Equal); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_Equal);
    __Pyx_GIVEREF(__pyx_n_s_Equal);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_n_s_Equal);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 70, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 70, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_Equal, __pyx_t_2) < 0)) __PYX_ERR(1, 70, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "EnumType":71
 *         pass
 *     __Pyx_globals['Equal'] = CompareOperator(Equal, 'Equal')
 *     __Pyx_globals['NotEqual'] = CompareOperator(NotEqual, 'NotEqual')             # <<<<<<<<<<<<<<
 *     __Pyx_globals['Greater'] = CompareOperator(Greater, 'Greater')
 *     __Pyx_globals['GreaterEqual'] = CompareOperator(GreaterEqual, 'GreaterEqual')
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_NotEqual); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
    __Pyx_INCREF(__pyx_n_s_NotEqual);
    __Pyx_GIVEREF(__pyx_n_s_NotEqual);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_n_s_NotEqual);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 71, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_NotEqual, __pyx_t_7) < 0)) __PYX_ERR(1, 71, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "EnumType":72
 *     __Pyx_globals['Equal'] = CompareOperator(Equal, 'Equal')
 *     __Pyx_globals['NotEqual'] = CompareOperator(NotEqual, 'NotEqual')
 *     __Pyx_globals['Greater'] = CompareOperator(Greater, 'Greater')             # <<<<<<<<<<<<<<
 *     __Pyx_globals['GreaterEqual'] = CompareOperator(GreaterEqual, 'GreaterEqual')
 *     __Pyx_globals['Less'] = CompareOperator(Less, 'Less')
 */
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Greater); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);
    __Pyx_INCREF(__pyx_n_s_Greater);
    __Pyx_GIVEREF(__pyx_n_s_Greater);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Greater);
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 72, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 72, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_Greater, __pyx_t_8) < 0)) __PYX_ERR(1, 72, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "EnumType":73
 *     __Pyx_globals['NotEqual'] = CompareOperator(NotEqual, 'NotEqual')
 *     __Pyx_globals['Greater'] = CompareOperator(Greater, 'Greater')
 *     __Pyx_globals['GreaterEqual'] = CompareOperator(GreaterEqual, 'GreaterEqual')             # <<<<<<<<<<<<<<
 *     __Pyx_globals['Less'] = CompareOperator(Less, 'Less')
 *     __Pyx_globals['LessEqual'] = CompareOperator(LessEqual, 'LessEqual')
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 73, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_GreaterEqual); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 73, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 73, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_GreaterEqual);
    __Pyx_GIVEREF(__pyx_n_s_GreaterEqual);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_n_s_GreaterEqual);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 73, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 73, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_GreaterEqual, __pyx_t_2) < 0)) __PYX_ERR(1, 73, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "EnumType":74
 *     __Pyx_globals['Greater'] = CompareOperator(Greater, 'Greater')
 *     __Pyx_globals['GreaterEqual'] = CompareOperator(GreaterEqual, 'GreaterEqual')
 *     __Pyx_globals['Less'] = CompareOperator(Less, 'Less')             # <<<<<<<<<<<<<<
 *     __Pyx_globals['LessEqual'] = CompareOperator(LessEqual, 'LessEqual')
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_Less); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
    __Pyx_INCREF(__pyx_n_s_Less);
    __Pyx_GIVEREF(__pyx_n_s_Less);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_n_s_Less);
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 74, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_Less, __pyx_t_7) < 0)) __PYX_ERR(1, 74, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "EnumType":75
 *     __Pyx_globals['GreaterEqual'] = CompareOperator(GreaterEqual, 'GreaterEqual')
 *     __Pyx_globals['Less'] = CompareOperator(Less, 'Less')
 *     __Pyx_globals['LessEqual'] = CompareOperator(LessEqual, 'LessEqual')             # <<<<<<<<<<<<<<
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_CompareOperator); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 75, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyInt_From_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(__pyx_e_7pyarrow_8_dataset_LessEqual); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 75, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 75, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);
    __Pyx_INCREF(__pyx_n_s_LessEqual);
    __Pyx_GIVEREF(__pyx_n_s_LessEqual);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_LessEqual);
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 75, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(__Pyx_globals == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(1, 75, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__Pyx_globals, __pyx_n_s_LessEqual, __pyx_t_8) < 0)) __PYX_ERR(1, 75, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __pyx_L4:;

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  if (__pyx_m) {
    if (__pyx_d) {
      __Pyx_AddTraceback("init pyarrow._dataset", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    Py_CLEAR(__pyx_m);
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init pyarrow._dataset");
  }
  __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;
}

/* RaiseDoubleKeywords */
static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AsString(kw_name));
        #endif
}

/* ParseKeywords */
static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;
    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
            continue;
        }
        name = first_kw_arg;
        #if PY_MAJOR_VERSION < 3
        if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
            while (*name) {
                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
                        && _PyString_Eq(**name, key)) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    if ((**argname == key) || (
                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
                             && _PyString_Eq(**argname, key))) {
                        goto arg_passed_twice;
                    }
                    argname++;
                }
            }
        } else
        #endif
        if (likely(PyUnicode_Check(key))) {
            while (*name) {
                int cmp = (**name == key) ? 0 :
                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                    (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
                #endif
                    PyUnicode_Compare(**name, key);
                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                if (cmp == 0) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    int cmp = (**argname == key) ? 0 :
                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                        (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
                    #endif
                        PyUnicode_Compare(**argname, key);
                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                    if (cmp == 0) goto arg_passed_twice;
                    argname++;
                }
            }
        } else
            goto invalid_keyword_type;
        if (kwds2) {
            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
        } else {
            goto invalid_keyword;
        }
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    goto bad;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

/* RaiseArgTupleInvalid */
static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

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

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

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

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

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

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

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

/* PyObjectSetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_setattro))
        return tp->tp_setattro(obj, attr_name, value);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_setattr))
        return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
#endif
    return PyObject_SetAttr(obj, attr_name, value);
}
#endif

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

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

/* DictGetItem */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
    PyObject *value;
    value = PyDict_GetItemWithError(d, key);
    if (unlikely(!value)) {
        if (!PyErr_Occurred()) {
            if (unlikely(PyTuple_Check(key))) {
                PyObject* args = PyTuple_Pack(1, key);
                if (likely(args)) {
                    PyErr_SetObject(PyExc_KeyError, args);
                    Py_DECREF(args);
                }
            } else {
                PyErr_SetObject(PyExc_KeyError, key);
            }
        }
        return NULL;
    }
    Py_INCREF(value);
    return value;
}
#endif

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

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

/* GetAttr3 */
static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        return NULL;
    __Pyx_PyErr_Clear();
    Py_INCREF(d);
    return d;
}
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
    PyObject *r = __Pyx_GetAttr(o, n);
    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
}

/* Import */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    #if PY_MAJOR_VERSION < 3
    PyObject *py_import;
    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
    if (!py_import)
        goto bad;
    #endif
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    {
        #if PY_MAJOR_VERSION >= 3
        if (level == -1) {
            if (strchr(__Pyx_MODULE_NAME, '.')) {
                module = PyImport_ImportModuleLevelObject(
                    name, global_dict, empty_dict, list, 1);
                if (!module) {
                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
                        goto bad;
                    PyErr_Clear();
                }
            }
            level = 0;
        }
        #endif
        if (!module) {
            #if PY_MAJOR_VERSION < 3
            PyObject *py_level = PyInt_FromLong(level);
            if (!py_level)
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
            Py_DECREF(py_level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, global_dict, empty_dict, list, level);
            #endif
        }
    }
bad:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(py_import);
    #endif
    Py_XDECREF(empty_list);
    Py_XDECREF(empty_dict);
    return module;
}

/* ImportFrom */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Format(PyExc_ImportError,
        #if PY_MAJOR_VERSION < 3
            "cannot import name %.230s", PyString_AS_STRING(name));
        #else
            "cannot import name %S", name);
        #endif
    }
    return value;
}

/* HasAttr */
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
    PyObject *r;
    if (unlikely(!__Pyx_PyBaseString_Check(n))) {
        PyErr_SetString(PyExc_TypeError,
                        "hasattr(): attribute name must be string");
        return -1;
    }
    r = __Pyx_GetAttr(o, n);
    if (unlikely(!r)) {
        PyErr_Clear();
        return 0;
    } else {
        Py_DECREF(r);
        return 1;
    }
}

/* 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);
  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 __PYX_GOOD;
#else
    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
#endif
#if CYTHON_USE_PYTYPE_LOOKUP
    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#else
    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#endif
    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_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 __PYX_BAD;
#else
        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
#endif
        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_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 __PYX_BAD;
            ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
            ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_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 __PYX_BAD;
                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
            }
            PyType_Modified((PyTypeObject*)type_obj);
        }
    }
    goto __PYX_GOOD;
__PYX_BAD:
    if (!PyErr_Occurred())
        PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
    ret = -1;
__PYX_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;
}

/* GetNameInClass */
static PyObject *__Pyx_GetGlobalNameAfterAttributeLookup(PyObject *name) {
    PyObject *result;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        return NULL;
    __Pyx_PyErr_Clear();
    __Pyx_GetModuleGlobalNameUncached(result, name);
    return result;
}
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name) {
    PyObject *result;
    result = __Pyx_PyObject_GetAttrStr(nmspace, name);
    if (!result) {
        result = __Pyx_GetGlobalNameAfterAttributeLookup(name);
    }
    return result;
}

/* CalculateMetaclass */
static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
    Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
    for (i=0; i < nbases; i++) {
        PyTypeObject *tmptype;
        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
        tmptype = Py_TYPE(tmp);
#if PY_MAJOR_VERSION < 3
        if (tmptype == &PyClass_Type)
            continue;
#endif
        if (!metaclass) {
            metaclass = tmptype;
            continue;
        }
        if (PyType_IsSubtype(metaclass, tmptype))
            continue;
        if (PyType_IsSubtype(tmptype, metaclass)) {
            metaclass = tmptype;
            continue;
        }
        PyErr_SetString(PyExc_TypeError,
                        "metaclass conflict: "
                        "the metaclass of a derived class "
                        "must be a (non-strict) subclass "
                        "of the metaclasses of all its bases");
        return NULL;
    }
    if (!metaclass) {
#if PY_MAJOR_VERSION < 3
        metaclass = &PyClass_Type;
#else
        metaclass = &PyType_Type;
#endif
    }
    Py_INCREF((PyObject*) metaclass);
    return (PyObject*) metaclass;
}

/* FetchCommonType */
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
    PyObject* fake_module;
    PyTypeObject* cached_type = NULL;
    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
    if (!fake_module) return NULL;
    Py_INCREF(fake_module);
    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
    if (cached_type) {
        if (!PyType_Check((PyObject*)cached_type)) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s is not a type object",
                type->tp_name);
            goto bad;
        }
        if (cached_type->tp_basicsize != type->tp_basicsize) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s has the wrong size, try recompiling",
                type->tp_name);
            goto bad;
        }
    } else {
        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
        PyErr_Clear();
        if (PyType_Ready(type) < 0) goto bad;
        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
            goto bad;
        Py_INCREF(type);
        cached_type = type;
    }
done:
    Py_DECREF(fake_module);
    return cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}

/* CythonFunction */
#include <structmember.h>
static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
{
    if (unlikely(op->func_doc == NULL)) {
        if (op->func.m_ml->ml_doc) {
#if PY_MAJOR_VERSION >= 3
            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
#else
            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
#endif
            if (unlikely(op->func_doc == NULL))
                return NULL;
        } else {
            Py_INCREF(Py_None);
            return Py_None;
        }
    }
    Py_INCREF(op->func_doc);
    return op->func_doc;
}
static int
__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp = op->func_doc;
    if (value == NULL) {
        value = Py_None;
    }
    Py_INCREF(value);
    op->func_doc = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    if (unlikely(op->func_name == NULL)) {
#if PY_MAJOR_VERSION >= 3
        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
#else
        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
#endif
        if (unlikely(op->func_name == NULL))
            return NULL;
    }
    Py_INCREF(op->func_name);
    return op->func_name;
}
static int
__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    tmp = op->func_name;
    Py_INCREF(value);
    op->func_name = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(op->func_qualname);
    return op->func_qualname;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    tmp = op->func_qualname;
    Py_INCREF(value);
    op->func_qualname = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
{
    PyObject *self;
    self = m->func_closure;
    if (self == NULL)
        self = Py_None;
    Py_INCREF(self);
    return self;
}
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    if (unlikely(op->func_dict == NULL)) {
        op->func_dict = PyDict_New();
        if (unlikely(op->func_dict == NULL))
            return NULL;
    }
    Py_INCREF(op->func_dict);
    return op->func_dict;
}
static int
__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
    if (unlikely(value == NULL)) {
        PyErr_SetString(PyExc_TypeError,
               "function's dictionary may not be deleted");
        return -1;
    }
    if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
               "setting function's dictionary to a non-dict");
        return -1;
    }
    tmp = op->func_dict;
    Py_INCREF(value);
    op->func_dict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(op->func_globals);
    return op->func_globals;
}
static PyObject *
__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
    int result = 0;
    PyObject *res = op->defaults_getter((PyObject *) op);
    if (unlikely(!res))
        return -1;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
    Py_INCREF(op->defaults_tuple);
    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
    Py_INCREF(op->defaults_kwdict);
    #else
    op->defaults_tuple = PySequence_ITEM(res, 0);
    if (unlikely(!op->defaults_tuple)) result = -1;
    else {
        op->defaults_kwdict = PySequence_ITEM(res, 1);
        if (unlikely(!op->defaults_kwdict)) result = -1;
    }
    #endif
    Py_DECREF(res);
    return result;
}
static int
__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyTuple_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_tuple;
    op->defaults_tuple = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->defaults_tuple;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_tuple;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value) {
        value = Py_None;
    } else if (value != Py_None && !PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    Py_INCREF(value);
    tmp = op->defaults_kwdict;
    op->defaults_kwdict = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->defaults_kwdict;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
            result = op->defaults_kwdict;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
    PyObject* tmp;
    if (!value || value == Py_None) {
        value = NULL;
    } else if (!PyDict_Check(value)) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    tmp = op->func_annotations;
    op->func_annotations = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
    PyObject* result = op->func_annotations;
    if (unlikely(!result)) {
        result = PyDict_New();
        if (unlikely(!result)) return NULL;
        op->func_annotations = result;
    }
    Py_INCREF(result);
    return result;
}
static PyGetSetDef __pyx_CyFunction_getsets[] = {
    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
    {0, 0, 0, 0, 0}
};
static PyMemberDef __pyx_CyFunction_members[] = {
    {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0},
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
{
#if PY_MAJOR_VERSION >= 3
    return PyUnicode_FromString(m->func.m_ml->ml_name);
#else
    return PyString_FromString(m->func.m_ml->ml_name);
#endif
}
static PyMethodDef __pyx_CyFunction_methods[] = {
    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
    {0, 0, 0, 0}
};
#if PY_VERSION_HEX < 0x030500A0
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
#else
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
#endif
static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
    if (op == NULL)
        return NULL;
    op->flags = flags;
    __Pyx_CyFunction_weakreflist(op) = NULL;
    op->func.m_ml = ml;
    op->func.m_self = (PyObject *) op;
    Py_XINCREF(closure);
    op->func_closure = closure;
    Py_XINCREF(module);
    op->func.m_module = module;
    op->func_dict = NULL;
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
    op->func_classobj = NULL;
    op->func_globals = globals;
    Py_INCREF(op->func_globals);
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults_pyobjects = 0;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    PyObject_GC_Track(op);
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
    Py_CLEAR(m->func.m_module);
    Py_CLEAR(m->func_dict);
    Py_CLEAR(m->func_name);
    Py_CLEAR(m->func_qualname);
    Py_CLEAR(m->func_doc);
    Py_CLEAR(m->func_globals);
    Py_CLEAR(m->func_code);
    Py_CLEAR(m->func_classobj);
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_XDECREF(pydefaults[i]);
        PyObject_Free(m->defaults);
        m->defaults = NULL;
    }
    return 0;
}
static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    if (__Pyx_CyFunction_weakreflist(m) != NULL)
        PyObject_ClearWeakRefs((PyObject *) m);
    __Pyx_CyFunction_clear(m);
    PyObject_GC_Del(m);
}
static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    PyObject_GC_UnTrack(m);
    __Pyx__CyFunction_dealloc(m);
}
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
    Py_VISIT(m->func_closure);
    Py_VISIT(m->func.m_module);
    Py_VISIT(m->func_dict);
    Py_VISIT(m->func_name);
    Py_VISIT(m->func_qualname);
    Py_VISIT(m->func_doc);
    Py_VISIT(m->func_globals);
    Py_VISIT(m->func_code);
    Py_VISIT(m->func_classobj);
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    if (m->defaults) {
        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
        int i;
        for (i = 0; i < m->defaults_pyobjects; i++)
            Py_VISIT(pydefaults[i]);
    }
    return 0;
}
static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
{
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
        Py_INCREF(func);
        return func;
    }
    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
        if (type == NULL)
            type = (PyObject *)(Py_TYPE(obj));
        return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
    }
    if (obj == Py_None)
        obj = NULL;
    return __Pyx_PyMethod_New(func, obj, type);
}
static PyObject*
__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
{
#if PY_MAJOR_VERSION >= 3
    return PyUnicode_FromFormat("<cyfunction %U at %p>",
                                op->func_qualname, (void *)op);
#else
    return PyString_FromFormat("<cyfunction %s at %p>",
                               PyString_AsString(op->func_qualname), (void *)op);
#endif
}
static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
    PyCFunctionObject* f = (PyCFunctionObject*)func;
    PyCFunction meth = f->m_ml->ml_meth;
    Py_ssize_t size;
    switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
    case METH_VARARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0))
            return (*meth)(self, arg);
        break;
    case METH_VARARGS | METH_KEYWORDS:
        return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw);
    case METH_NOARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
            size = PyTuple_GET_SIZE(arg);
            if (likely(size == 0))
                return (*meth)(self, NULL);
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    case METH_O:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
            size = PyTuple_GET_SIZE(arg);
            if (likely(size == 1)) {
                PyObject *result, *arg0;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                arg0 = PyTuple_GET_ITEM(arg, 0);
                #else
                arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
                #endif
                result = (*meth)(self, arg0);
                #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
                Py_DECREF(arg0);
                #endif
                return result;
            }
            PyErr_Format(PyExc_TypeError,
                "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
                f->m_ml->ml_name, size);
            return NULL;
        }
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
                        "longer supported!");
        return NULL;
    }
    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
                 f->m_ml->ml_name);
    return NULL;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw);
}
static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
    PyObject *result;
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        Py_ssize_t argc;
        PyObject *new_args;
        PyObject *self;
        argc = PyTuple_GET_SIZE(args);
        new_args = PyTuple_GetSlice(args, 1, argc);
        if (unlikely(!new_args))
            return NULL;
        self = PyTuple_GetItem(args, 0);
        if (unlikely(!self)) {
            Py_DECREF(new_args);
            return NULL;
        }
        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
        Py_DECREF(new_args);
    } else {
        result = __Pyx_CyFunction_Call(func, args, kw);
    }
    return result;
}
static PyTypeObject __pyx_CyFunctionType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
    (destructor) __Pyx_CyFunction_dealloc,
    0,
    0,
    0,
#if PY_MAJOR_VERSION < 3
    0,
#else
    0,
#endif
    (reprfunc) __Pyx_CyFunction_repr,
    0,
    0,
    0,
    0,
    __Pyx_CyFunction_CallAsMethod,
    0,
    0,
    0,
    0,
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
    0,
    (traverseproc) __Pyx_CyFunction_traverse,
    (inquiry) __Pyx_CyFunction_clear,
    0,
#if PY_VERSION_HEX < 0x030500A0
    offsetof(__pyx_CyFunctionObject, func_weakreflist),
#else
    offsetof(PyCFunctionObject, m_weakreflist),
#endif
    0,
    0,
    __pyx_CyFunction_methods,
    __pyx_CyFunction_members,
    __pyx_CyFunction_getsets,
    0,
    0,
    __Pyx_CyFunction_descr_get,
    0,
    offsetof(__pyx_CyFunctionObject, func_dict),
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
#if PY_VERSION_HEX >= 0x030400a1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
    0,
#endif
};
static int __pyx_CyFunction_init(void) {
    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
    if (unlikely(__pyx_CyFunctionType == NULL)) {
        return -1;
    }
    return 0;
}
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults = PyObject_Malloc(size);
    if (unlikely(!m->defaults))
        return PyErr_NoMemory();
    memset(m->defaults, 0, size);
    m->defaults_pyobjects = pyobjects;
    return m->defaults;
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_tuple = tuple;
    Py_INCREF(tuple);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_kwdict = dict;
    Py_INCREF(dict);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->func_annotations = dict;
    Py_INCREF(dict);
}

/* Py3ClassCreate */
static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
    PyObject *ns;
    if (metaclass) {
        PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare);
        if (prep) {
            PyObject *pargs = PyTuple_Pack(2, name, bases);
            if (unlikely(!pargs)) {
                Py_DECREF(prep);
                return NULL;
            }
            ns = PyObject_Call(prep, pargs, mkw);
            Py_DECREF(prep);
            Py_DECREF(pargs);
        } else {
            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
                return NULL;
            PyErr_Clear();
            ns = PyDict_New();
        }
    } else {
        ns = PyDict_New();
    }
    if (unlikely(!ns))
        return NULL;
    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
    return ns;
bad:
    Py_DECREF(ns);
    return NULL;
}
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
                                      PyObject *dict, PyObject *mkw,
                                      int calculate_metaclass, int allow_py2_metaclass) {
    PyObject *result, *margs;
    PyObject *owned_metaclass = NULL;
    if (allow_py2_metaclass) {
        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
        if (owned_metaclass) {
            metaclass = owned_metaclass;
        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
            PyErr_Clear();
        } else {
            return NULL;
        }
    }
    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
        Py_XDECREF(owned_metaclass);
        if (unlikely(!metaclass))
            return NULL;
        owned_metaclass = metaclass;
    }
    margs = PyTuple_Pack(3, name, bases, dict);
    if (unlikely(!margs)) {
        result = NULL;
    } else {
        result = PyObject_Call(metaclass, margs, mkw);
        Py_DECREF(margs);
    }
    Py_XDECREF(owned_metaclass);
    return result;
}

/* Globals */
static PyObject* __Pyx_Globals(void) {
    Py_ssize_t i;
    PyObject *names;
    PyObject *globals = __pyx_d;
    Py_INCREF(globals);
    names = PyObject_Dir(__pyx_m);
    if (!names)
        goto bad;
    for (i = PyList_GET_SIZE(names)-1; i >= 0; i--) {
#if CYTHON_COMPILING_IN_PYPY
        PyObject* name = PySequence_ITEM(names, i);
        if (!name)
            goto bad;
#else
        PyObject* name = PyList_GET_ITEM(names, i);
#endif
        if (!PyDict_Contains(globals, name)) {
            PyObject* value = __Pyx_GetAttr(__pyx_m, name);
            if (!value) {
#if CYTHON_COMPILING_IN_PYPY
                Py_DECREF(name);
#endif
                goto bad;
            }
            if (PyDict_SetItem(globals, name, value) < 0) {
#if CYTHON_COMPILING_IN_PYPY
                Py_DECREF(name);
#endif
                Py_DECREF(value);
                goto bad;
            }
        }
#if CYTHON_COMPILING_IN_PYPY
        Py_DECREF(name);
#endif
    }
    Py_DECREF(names);
    return globals;
bad:
    Py_XDECREF(names);
    Py_XDECREF(globals);
    return NULL;
}

/* 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;\
    }

/* None */
static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) {
  int err;
  #ifdef WITH_THREAD
  PyGILState_STATE _save = PyGILState_Ensure();
  #endif
  err = !!PyErr_Occurred();
  #ifdef WITH_THREAD
  PyGILState_Release(_save);
  #endif
  return err;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__arrow_3a__3a_dataset_3a__3a_ExpressionType_3a__3a_type(enum arrow::dataset::ExpressionType::type value) {
    const enum arrow::dataset::ExpressionType::type neg_one = (enum arrow::dataset::ExpressionType::type) ((enum arrow::dataset::ExpressionType::type) 0 - (enum arrow::dataset::ExpressionType::type) 1), const_zero = (enum arrow::dataset::ExpressionType::type) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum arrow::dataset::ExpressionType::type) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum arrow::dataset::ExpressionType::type) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum arrow::dataset::ExpressionType::type) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum arrow::dataset::ExpressionType::type) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum arrow::dataset::ExpressionType::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::dataset::ExpressionType::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_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(enum __pyx_t_7pyarrow_8_dataset_CompareOperator value) {
    const enum __pyx_t_7pyarrow_8_dataset_CompareOperator neg_one = (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) ((enum __pyx_t_7pyarrow_8_dataset_CompareOperator) 0 - (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) 1), const_zero = (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= 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 __pyx_t_7pyarrow_8_dataset_CompareOperator),
                                     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 __pyx_t_7pyarrow_8_dataset_CompareOperator __Pyx_PyInt_As_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(PyObject *x) {
    const enum __pyx_t_7pyarrow_8_dataset_CompareOperator neg_one = (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) ((enum __pyx_t_7pyarrow_8_dataset_CompareOperator) 0 - (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) 1), const_zero = (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) 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 __pyx_t_7pyarrow_8_dataset_CompareOperator) 0;
                case  1: __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, digit, digits[0])
                case 2:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) >= 2 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) (((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) >= 3 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) (((((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, 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 __pyx_t_7pyarrow_8_dataset_CompareOperator) >= 4 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) (((((((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[3]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)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 __pyx_t_7pyarrow_8_dataset_CompareOperator) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, 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 __pyx_t_7pyarrow_8_dataset_CompareOperator) 0;
                case -1: __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 2 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) (((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)-1)*(((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 2 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) ((((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 3 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) (((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)-1)*(((((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 3 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) ((((((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, 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 __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 4 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) (((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)-1)*(((((((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[3]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, 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 __pyx_t_7pyarrow_8_dataset_CompareOperator) - 1 > 4 * PyLong_SHIFT) {
                            return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) ((((((((((enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[3]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[2]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[1]) << PyLong_SHIFT) | (enum __pyx_t_7pyarrow_8_dataset_CompareOperator)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(enum __pyx_t_7pyarrow_8_dataset_CompareOperator) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(enum __pyx_t_7pyarrow_8_dataset_CompareOperator, 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 __pyx_t_7pyarrow_8_dataset_CompareOperator 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 __pyx_t_7pyarrow_8_dataset_CompareOperator) -1;
        }
    } else {
        enum __pyx_t_7pyarrow_8_dataset_CompareOperator val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) -1;
        val = __Pyx_PyInt_As_enum____pyx_t_7pyarrow_8_dataset_CompareOperator(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to enum __pyx_t_7pyarrow_8_dataset_CompareOperator");
    return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to enum __pyx_t_7pyarrow_8_dataset_CompareOperator");
    return (enum __pyx_t_7pyarrow_8_dataset_CompareOperator) -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 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;
}

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

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

/* SwapException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = *type;
    exc_info->exc_value = *value;
    exc_info->exc_traceback = *tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = *type;
    tstate->exc_value = *value;
    tstate->exc_traceback = *tb;
    #endif
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
    PyErr_SetExcInfo(*type, *value, *tb);
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#endif

/* PyObjectGetMethod */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
    PyObject *attr;
#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
    PyTypeObject *tp = Py_TYPE(obj);
    PyObject *descr;
    descrgetfunc f = NULL;
    PyObject **dictptr, *dict;
    int meth_found = 0;
    assert (*method == NULL);
    if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
        attr = __Pyx_PyObject_GetAttrStr(obj, name);
        goto try_unpack;
    }
    if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
        return 0;
    }
    descr = _PyType_Lookup(tp, name);
    if (likely(descr != NULL)) {
        Py_INCREF(descr);
#if PY_MAJOR_VERSION >= 3
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type)))
        #endif
#else
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr)))
        #endif
#endif
        {
            meth_found = 1;
        } else {
            f = Py_TYPE(descr)->tp_descr_get;
            if (f != NULL && PyDescr_IsData(descr)) {
                attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
                Py_DECREF(descr);
                goto try_unpack;
            }
        }
    }
    dictptr = _PyObject_GetDictPtr(obj);
    if (dictptr != NULL && (dict = *dictptr) != NULL) {
        Py_INCREF(dict);
        attr = __Pyx_PyDict_GetItemStr(dict, name);
        if (attr != NULL) {
            Py_INCREF(attr);
            Py_DECREF(dict);
            Py_XDECREF(descr);
            goto try_unpack;
        }
        Py_DECREF(dict);
    }
    if (meth_found) {
        *method = descr;
        return 1;
    }
    if (f != NULL) {
        attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
        Py_DECREF(descr);
        goto try_unpack;
    }
    if (descr != NULL) {
        *method = descr;
        return 0;
    }
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'%.50s' object has no attribute '%U'",
                 tp->tp_name, name);
#else
                 "'%.50s' object has no attribute '%.400s'",
                 tp->tp_name, PyString_AS_STRING(name));
#endif
    return 0;
#else
    attr = __Pyx_PyObject_GetAttrStr(obj, name);
    goto try_unpack;
#endif
try_unpack:
#if CYTHON_UNPACK_METHODS
    if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
        PyObject *function = PyMethod_GET_FUNCTION(attr);
        Py_INCREF(function);
        Py_DECREF(attr);
        *method = function;
        return 1;
    }
#endif
    *method = attr;
    return 0;
}

/* PyObjectCallMethod1 */
static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
    PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
    Py_DECREF(method);
    return result;
}
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
    PyObject *method = NULL, *result;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_Call2Args(method, obj, arg);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) return NULL;
    return __Pyx__PyObject_CallMethod1(method, arg);
}

/* CoroutineBase */
#include <structmember.h>
#include <frameobject.h>
#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom)
static int __Pyx_PyGen__FetchStopIterationValue(CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject **pvalue) {
    PyObject *et, *ev, *tb;
    PyObject *value = NULL;
    __Pyx_ErrFetch(&et, &ev, &tb);
    if (!et) {
        Py_XDECREF(tb);
        Py_XDECREF(ev);
        Py_INCREF(Py_None);
        *pvalue = Py_None;
        return 0;
    }
    if (likely(et == PyExc_StopIteration)) {
        if (!ev) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#if PY_VERSION_HEX >= 0x030300A0
        else if (Py_TYPE(ev) == (PyTypeObject*)PyExc_StopIteration) {
            value = ((PyStopIterationObject *)ev)->value;
            Py_INCREF(value);
            Py_DECREF(ev);
        }
#endif
        else if (unlikely(PyTuple_Check(ev))) {
            if (PyTuple_GET_SIZE(ev) >= 1) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                value = PyTuple_GET_ITEM(ev, 0);
                Py_INCREF(value);
#else
                value = PySequence_ITEM(ev, 0);
#endif
            } else {
                Py_INCREF(Py_None);
                value = Py_None;
            }
            Py_DECREF(ev);
        }
        else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) {
            value = ev;
        }
        if (likely(value)) {
            Py_XDECREF(tb);
            Py_DECREF(et);
            *pvalue = value;
            return 0;
        }
    } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    PyErr_NormalizeException(&et, &ev, &tb);
    if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    Py_XDECREF(tb);
    Py_DECREF(et);
#if PY_VERSION_HEX >= 0x030300A0
    value = ((PyStopIterationObject *)ev)->value;
    Py_INCREF(value);
    Py_DECREF(ev);
#else
    {
        PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args);
        Py_DECREF(ev);
        if (likely(args)) {
            value = PySequence_GetItem(args, 0);
            Py_DECREF(args);
        }
        if (unlikely(!value)) {
            __Pyx_ErrRestore(NULL, NULL, NULL);
            Py_INCREF(Py_None);
            value = Py_None;
        }
    }
#endif
    *pvalue = value;
    return 0;
}
static CYTHON_INLINE
void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) {
    PyObject *t, *v, *tb;
    t = exc_state->exc_type;
    v = exc_state->exc_value;
    tb = exc_state->exc_traceback;
    exc_state->exc_type = NULL;
    exc_state->exc_value = NULL;
    exc_state->exc_traceback = NULL;
    Py_XDECREF(t);
    Py_XDECREF(v);
    Py_XDECREF(tb);
}
#define __Pyx_Coroutine_AlreadyRunningError(gen)  (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyRunningError(CYTHON_UNUSED __pyx_CoroutineObject *gen) {
    const char *msg;
    if ((0)) {
    #ifdef __Pyx_Coroutine_USED
    } else if (__Pyx_Coroutine_Check((PyObject*)gen)) {
        msg = "coroutine already executing";
    #endif
    #ifdef __Pyx_AsyncGen_USED
    } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) {
        msg = "async generator already executing";
    #endif
    } else {
        msg = "generator already executing";
    }
    PyErr_SetString(PyExc_ValueError, msg);
}
#define __Pyx_Coroutine_NotStartedError(gen)  (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_NotStartedError(CYTHON_UNUSED PyObject *gen) {
    const char *msg;
    if ((0)) {
    #ifdef __Pyx_Coroutine_USED
    } else if (__Pyx_Coroutine_Check(gen)) {
        msg = "can't send non-None value to a just-started coroutine";
    #endif
    #ifdef __Pyx_AsyncGen_USED
    } else if (__Pyx_AsyncGen_CheckExact(gen)) {
        msg = "can't send non-None value to a just-started async generator";
    #endif
    } else {
        msg = "can't send non-None value to a just-started generator";
    }
    PyErr_SetString(PyExc_TypeError, msg);
}
#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing)  (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyTerminatedError(CYTHON_UNUSED PyObject *gen, PyObject *value, CYTHON_UNUSED int closing) {
    #ifdef __Pyx_Coroutine_USED
    if (!closing && __Pyx_Coroutine_Check(gen)) {
        PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine");
    } else
    #endif
    if (value) {
        #ifdef __Pyx_AsyncGen_USED
        if (__Pyx_AsyncGen_CheckExact(gen))
            PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration);
        else
        #endif
        PyErr_SetNone(PyExc_StopIteration);
    }
}
static
PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) {
    __Pyx_PyThreadState_declare
    PyThreadState *tstate;
    __Pyx_ExcInfoStruct *exc_state;
    PyObject *retval;
    assert(!self->is_running);
    if (unlikely(self->resume_label == 0)) {
        if (unlikely(value && value != Py_None)) {
            return __Pyx_Coroutine_NotStartedError((PyObject*)self);
        }
    }
    if (unlikely(self->resume_label == -1)) {
        return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing);
    }
#if CYTHON_FAST_THREAD_STATE
    __Pyx_PyThreadState_assign
    tstate = __pyx_tstate;
#else
    tstate = __Pyx_PyThreadState_Current;
#endif
    exc_state = &self->gi_exc_state;
    if (exc_state->exc_type) {
        #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
        #else
        if (exc_state->exc_traceback) {
            PyTracebackObject *tb = (PyTracebackObject *) exc_state->exc_traceback;
            PyFrameObject *f = tb->tb_frame;
            Py_XINCREF(tstate->frame);
            assert(f->f_back == NULL);
            f->f_back = tstate->frame;
        }
        #endif
    }
#if CYTHON_USE_EXC_INFO_STACK
    exc_state->previous_item = tstate->exc_info;
    tstate->exc_info = exc_state;
#else
    if (exc_state->exc_type) {
        __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    } else {
        __Pyx_Coroutine_ExceptionClear(exc_state);
        __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    }
#endif
    self->is_running = 1;
    retval = self->body((PyObject *) self, tstate, value);
    self->is_running = 0;
#if CYTHON_USE_EXC_INFO_STACK
    exc_state = &self->gi_exc_state;
    tstate->exc_info = exc_state->previous_item;
    exc_state->previous_item = NULL;
    __Pyx_Coroutine_ResetFrameBackpointer(exc_state);
#endif
    return retval;
}
static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) {
    PyObject *exc_tb = exc_state->exc_traceback;
    if (likely(exc_tb)) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
#else
        PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
        PyFrameObject *f = tb->tb_frame;
        Py_CLEAR(f->f_back);
#endif
    }
}
static CYTHON_INLINE
PyObject *__Pyx_Coroutine_MethodReturn(CYTHON_UNUSED PyObject* gen, PyObject *retval) {
    if (unlikely(!retval)) {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        if (!__Pyx_PyErr_Occurred()) {
            PyObject *exc = PyExc_StopIteration;
            #ifdef __Pyx_AsyncGen_USED
            if (__Pyx_AsyncGen_CheckExact(gen))
                exc = __Pyx_PyExc_StopAsyncIteration;
            #endif
            __Pyx_PyErr_SetNone(exc);
        }
    }
    return retval;
}
static CYTHON_INLINE
PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) {
    PyObject *ret;
    PyObject *val = NULL;
    __Pyx_Coroutine_Undelegate(gen);
    __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val);
    ret = __Pyx_Coroutine_SendEx(gen, val, 0);
    Py_XDECREF(val);
    return ret;
}
static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) {
    PyObject *retval;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        gen->is_running = 1;
        #ifdef __Pyx_Generator_USED
        if (__Pyx_Generator_CheckExact(yf)) {
            ret = __Pyx_Coroutine_Send(yf, value);
        } else
        #endif
        #ifdef __Pyx_Coroutine_USED
        if (__Pyx_Coroutine_Check(yf)) {
            ret = __Pyx_Coroutine_Send(yf, value);
        } else
        #endif
        #ifdef __Pyx_AsyncGen_USED
        if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
            ret = __Pyx_async_gen_asend_send(yf, value);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
        if (PyGen_CheckExact(yf)) {
            ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
        if (PyCoro_CheckExact(yf)) {
            ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
        } else
        #endif
        {
            if (value == Py_None)
                ret = Py_TYPE(yf)->tp_iternext(yf);
            else
                ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value);
        }
        gen->is_running = 0;
        if (likely(ret)) {
            return ret;
        }
        retval = __Pyx_Coroutine_FinishDelegation(gen);
    } else {
        retval = __Pyx_Coroutine_SendEx(gen, value, 0);
    }
    return __Pyx_Coroutine_MethodReturn(self, retval);
}
static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) {
    PyObject *retval = NULL;
    int err = 0;
    #ifdef __Pyx_Generator_USED
    if (__Pyx_Generator_CheckExact(yf)) {
        retval = __Pyx_Coroutine_Close(yf);
        if (!retval)
            return -1;
    } else
    #endif
    #ifdef __Pyx_Coroutine_USED
    if (__Pyx_Coroutine_Check(yf)) {
        retval = __Pyx_Coroutine_Close(yf);
        if (!retval)
            return -1;
    } else
    if (__Pyx_CoroutineAwait_CheckExact(yf)) {
        retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL);
        if (!retval)
            return -1;
    } else
    #endif
    #ifdef __Pyx_AsyncGen_USED
    if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
        retval = __Pyx_async_gen_asend_close(yf, NULL);
    } else
    if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) {
        retval = __Pyx_async_gen_athrow_close(yf, NULL);
    } else
    #endif
    {
        PyObject *meth;
        gen->is_running = 1;
        meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_close);
        if (unlikely(!meth)) {
            if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
                PyErr_WriteUnraisable(yf);
            }
            PyErr_Clear();
        } else {
            retval = PyObject_CallFunction(meth, NULL);
            Py_DECREF(meth);
            if (!retval)
                err = -1;
        }
        gen->is_running = 0;
    }
    Py_XDECREF(retval);
    return err;
}
static PyObject *__Pyx_Generator_Next(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        gen->is_running = 1;
        #ifdef __Pyx_Generator_USED
        if (__Pyx_Generator_CheckExact(yf)) {
            ret = __Pyx_Generator_Next(yf);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
        if (PyGen_CheckExact(yf)) {
            ret = _PyGen_Send((PyGenObject*)yf, NULL);
        } else
        #endif
        #ifdef __Pyx_Coroutine_USED
        if (__Pyx_Coroutine_Check(yf)) {
            ret = __Pyx_Coroutine_Send(yf, Py_None);
        } else
        #endif
            ret = Py_TYPE(yf)->tp_iternext(yf);
        gen->is_running = 0;
        if (likely(ret)) {
            return ret;
        }
        return __Pyx_Coroutine_FinishDelegation(gen);
    }
    return __Pyx_Coroutine_SendEx(gen, Py_None, 0);
}
static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, CYTHON_UNUSED PyObject *arg) {
    return __Pyx_Coroutine_Close(self);
}
static PyObject *__Pyx_Coroutine_Close(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject *retval, *raised_exception;
    PyObject *yf = gen->yieldfrom;
    int err = 0;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        Py_INCREF(yf);
        err = __Pyx_Coroutine_CloseIter(gen, yf);
        __Pyx_Coroutine_Undelegate(gen);
        Py_DECREF(yf);
    }
    if (err == 0)
        PyErr_SetNone(PyExc_GeneratorExit);
    retval = __Pyx_Coroutine_SendEx(gen, NULL, 1);
    if (unlikely(retval)) {
        const char *msg;
        Py_DECREF(retval);
        if ((0)) {
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_Coroutine_Check(self)) {
            msg = "coroutine ignored GeneratorExit";
        #endif
        #ifdef __Pyx_AsyncGen_USED
        } else if (__Pyx_AsyncGen_CheckExact(self)) {
#if PY_VERSION_HEX < 0x03060000
            msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)";
#else
            msg = "async generator ignored GeneratorExit";
#endif
        #endif
        } else {
            msg = "generator ignored GeneratorExit";
        }
        PyErr_SetString(PyExc_RuntimeError, msg);
        return NULL;
    }
    raised_exception = PyErr_Occurred();
    if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) {
        if (raised_exception) PyErr_Clear();
        Py_INCREF(Py_None);
        return Py_None;
    }
    return NULL;
}
static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb,
                                        PyObject *args, int close_on_genexit) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        Py_INCREF(yf);
        if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) {
            int err = __Pyx_Coroutine_CloseIter(gen, yf);
            Py_DECREF(yf);
            __Pyx_Coroutine_Undelegate(gen);
            if (err < 0)
                return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
            goto throw_here;
        }
        gen->is_running = 1;
        if (0
        #ifdef __Pyx_Generator_USED
            || __Pyx_Generator_CheckExact(yf)
        #endif
        #ifdef __Pyx_Coroutine_USED
            || __Pyx_Coroutine_Check(yf)
        #endif
            ) {
            ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit);
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_CoroutineAwait_CheckExact(yf)) {
            ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit);
        #endif
        } else {
            PyObject *meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_throw);
            if (unlikely(!meth)) {
                Py_DECREF(yf);
                if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
                    gen->is_running = 0;
                    return NULL;
                }
                PyErr_Clear();
                __Pyx_Coroutine_Undelegate(gen);
                gen->is_running = 0;
                goto throw_here;
            }
            if (likely(args)) {
                ret = PyObject_CallObject(meth, args);
            } else {
                ret = PyObject_CallFunctionObjArgs(meth, typ, val, tb, NULL);
            }
            Py_DECREF(meth);
        }
        gen->is_running = 0;
        Py_DECREF(yf);
        if (!ret) {
            ret = __Pyx_Coroutine_FinishDelegation(gen);
        }
        return __Pyx_Coroutine_MethodReturn(self, ret);
    }
throw_here:
    __Pyx_Raise(typ, val, tb, NULL);
    return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
}
static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) {
    PyObject *typ;
    PyObject *val = NULL;
    PyObject *tb = NULL;
    if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))
        return NULL;
    return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1);
}
static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) {
    Py_VISIT(exc_state->exc_type);
    Py_VISIT(exc_state->exc_value);
    Py_VISIT(exc_state->exc_traceback);
    return 0;
}
static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) {
    Py_VISIT(gen->closure);
    Py_VISIT(gen->classobj);
    Py_VISIT(gen->yieldfrom);
    return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg);
}
static int __Pyx_Coroutine_clear(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    Py_CLEAR(gen->closure);
    Py_CLEAR(gen->classobj);
    Py_CLEAR(gen->yieldfrom);
    __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state);
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer);
    }
#endif
    Py_CLEAR(gen->gi_code);
    Py_CLEAR(gen->gi_name);
    Py_CLEAR(gen->gi_qualname);
    Py_CLEAR(gen->gi_modulename);
    return 0;
}
static void __Pyx_Coroutine_dealloc(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject_GC_UnTrack(gen);
    if (gen->gi_weakreflist != NULL)
        PyObject_ClearWeakRefs(self);
    if (gen->resume_label >= 0) {
        PyObject_GC_Track(self);
#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE
        if (PyObject_CallFinalizerFromDealloc(self))
#else
        Py_TYPE(gen)->tp_del(self);
        if (self->ob_refcnt > 0)
#endif
        {
            return;
        }
        PyObject_GC_UnTrack(self);
    }
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        /* We have to handle this case for asynchronous generators
           right here, because this code has to be between UNTRACK
           and GC_Del. */
        Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer);
    }
#endif
    __Pyx_Coroutine_clear(self);
    PyObject_GC_Del(gen);
}
static void __Pyx_Coroutine_del(PyObject *self) {
    PyObject *error_type, *error_value, *error_traceback;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    __Pyx_PyThreadState_declare
    if (gen->resume_label < 0) {
        return;
    }
#if !CYTHON_USE_TP_FINALIZE
    assert(self->ob_refcnt == 0);
    self->ob_refcnt = 1;
#endif
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&error_type, &error_value, &error_traceback);
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self;
        PyObject *finalizer = agen->ag_finalizer;
        if (finalizer && !agen->ag_closed) {
            PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self);
            if (unlikely(!res)) {
                PyErr_WriteUnraisable(self);
            } else {
                Py_DECREF(res);
            }
            __Pyx_ErrRestore(error_type, error_value, error_traceback);
            return;
        }
    }
#endif
    if (unlikely(gen->resume_label == 0 && !error_value)) {
#ifdef __Pyx_Coroutine_USED
#ifdef __Pyx_Generator_USED
    if (!__Pyx_Generator_CheckExact(self))
#endif
        {
        PyObject_GC_UnTrack(self);
#if PY_MAJOR_VERSION >= 3  || defined(PyErr_WarnFormat)
        if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0))
            PyErr_WriteUnraisable(self);
#else
        {PyObject *msg;
        char *cmsg;
        #if CYTHON_COMPILING_IN_PYPY
        msg = NULL;
        cmsg = (char*) "coroutine was never awaited";
        #else
        char *cname;
        PyObject *qualname;
        qualname = gen->gi_qualname;
        cname = PyString_AS_STRING(qualname);
        msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname);
        if (unlikely(!msg)) {
            PyErr_Clear();
            cmsg = (char*) "coroutine was never awaited";
        } else {
            cmsg = PyString_AS_STRING(msg);
        }
        #endif
        if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0))
            PyErr_WriteUnraisable(self);
        Py_XDECREF(msg);}
#endif
        PyObject_GC_Track(self);
        }
#endif
    } else {
        PyObject *res = __Pyx_Coroutine_Close(self);
        if (unlikely(!res)) {
            if (PyErr_Occurred())
                PyErr_WriteUnraisable(self);
        } else {
            Py_DECREF(res);
        }
    }
    __Pyx_ErrRestore(error_type, error_value, error_traceback);
#if !CYTHON_USE_TP_FINALIZE
    assert(self->ob_refcnt > 0);
    if (--self->ob_refcnt == 0) {
        return;
    }
    {
        Py_ssize_t refcnt = self->ob_refcnt;
        _Py_NewReference(self);
        self->ob_refcnt = refcnt;
    }
#if CYTHON_COMPILING_IN_CPYTHON
    assert(PyType_IS_GC(self->ob_type) &&
           _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
    _Py_DEC_REFTOTAL;
#endif
#ifdef COUNT_ALLOCS
    --Py_TYPE(self)->tp_frees;
    --Py_TYPE(self)->tp_allocs;
#endif
#endif
}
static PyObject *
__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
{
    PyObject *name = self->gi_name;
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, 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 = self->gi_name;
    Py_INCREF(value);
    self->gi_name = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
{
    PyObject *name = self->gi_qualname;
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, 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 = self->gi_qualname;
    Py_INCREF(value);
    self->gi_qualname = value;
    Py_XDECREF(tmp);
    return 0;
}
static __pyx_CoroutineObject *__Pyx__Coroutine_New(
            PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name) {
    __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type);
    if (unlikely(!gen))
        return NULL;
    return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name);
}
static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
            __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name) {
    gen->body = body;
    gen->closure = closure;
    Py_XINCREF(closure);
    gen->is_running = 0;
    gen->resume_label = 0;
    gen->classobj = NULL;
    gen->yieldfrom = NULL;
    gen->gi_exc_state.exc_type = NULL;
    gen->gi_exc_state.exc_value = NULL;
    gen->gi_exc_state.exc_traceback = NULL;
#if CYTHON_USE_EXC_INFO_STACK
    gen->gi_exc_state.previous_item = NULL;
#endif
    gen->gi_weakreflist = NULL;
    Py_XINCREF(qualname);
    gen->gi_qualname = qualname;
    Py_XINCREF(name);
    gen->gi_name = name;
    Py_XINCREF(module_name);
    gen->gi_modulename = module_name;
    Py_XINCREF(code);
    gen->gi_code = code;
    PyObject_GC_Track(gen);
    return gen;
}

/* PatchModuleWithCoroutine */
static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) {
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
    int result;
    PyObject *globals, *result_obj;
    globals = PyDict_New();  if (unlikely(!globals)) goto ignore;
    result = PyDict_SetItemString(globals, "_cython_coroutine_type",
    #ifdef __Pyx_Coroutine_USED
        (PyObject*)__pyx_CoroutineType);
    #else
        Py_None);
    #endif
    if (unlikely(result < 0)) goto ignore;
    result = PyDict_SetItemString(globals, "_cython_generator_type",
    #ifdef __Pyx_Generator_USED
        (PyObject*)__pyx_GeneratorType);
    #else
        Py_None);
    #endif
    if (unlikely(result < 0)) goto ignore;
    if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore;
    if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore;
    result_obj = PyRun_String(py_code, Py_file_input, globals, globals);
    if (unlikely(!result_obj)) goto ignore;
    Py_DECREF(result_obj);
    Py_DECREF(globals);
    return module;
ignore:
    Py_XDECREF(globals);
    PyErr_WriteUnraisable(module);
    if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) {
        Py_DECREF(module);
        module = NULL;
    }
#else
    py_code++;
#endif
    return module;
}

/* PatchGeneratorABC */
#ifndef CYTHON_REGISTER_ABCS
#define CYTHON_REGISTER_ABCS 1
#endif
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
static PyObject* __Pyx_patch_abc_module(PyObject *module);
static PyObject* __Pyx_patch_abc_module(PyObject *module) {
    module = __Pyx_Coroutine_patch_module(
        module, ""
"if _cython_generator_type is not None:\n"
"    try: Generator = _module.Generator\n"
"    except AttributeError: pass\n"
"    else: Generator.register(_cython_generator_type)\n"
"if _cython_coroutine_type is not None:\n"
"    try: Coroutine = _module.Coroutine\n"
"    except AttributeError: pass\n"
"    else: Coroutine.register(_cython_coroutine_type)\n"
    );
    return module;
}
#endif
static int __Pyx_patch_abc(void) {
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
    static int abc_patched = 0;
    if (CYTHON_REGISTER_ABCS && !abc_patched) {
        PyObject *module;
        module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections");
        if (!module) {
            PyErr_WriteUnraisable(NULL);
            if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning,
                    ((PY_MAJOR_VERSION >= 3) ?
                        "Cython module failed to register with collections.abc module" :
                        "Cython module failed to register with collections module"), 1) < 0)) {
                return -1;
            }
        } else {
            module = __Pyx_patch_abc_module(module);
            abc_patched = 1;
            if (unlikely(!module))
                return -1;
            Py_DECREF(module);
        }
        module = PyImport_ImportModule("backports_abc");
        if (module) {
            module = __Pyx_patch_abc_module(module);
            Py_XDECREF(module);
        }
        if (!module) {
            PyErr_Clear();
        }
    }
#else
    if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL);
#endif
    return 0;
}

/* Generator */
static PyMethodDef __pyx_Generator_methods[] = {
    {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O,
     (char*) PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")},
    {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS,
     (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")},
    {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS,
     (char*) PyDoc_STR("close() -> raise GeneratorExit inside generator.")},
    {0, 0, 0, 0}
};
static PyMemberDef __pyx_Generator_memberlist[] = {
    {(char *) "gi_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL},
    {(char*) "gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY,
     (char*) PyDoc_STR("object being iterated by 'yield from', or None")},
    {(char*) "gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL},
    {0, 0, 0, 0, 0}
};
static PyGetSetDef __pyx_Generator_getsets[] = {
    {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name,
     (char*) PyDoc_STR("name of the generator"), 0},
    {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
     (char*) PyDoc_STR("qualified name of the generator"), 0},
    {0, 0, 0, 0, 0}
};
static PyTypeObject __pyx_GeneratorType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    "generator",
    sizeof(__pyx_CoroutineObject),
    0,
    (destructor) __Pyx_Coroutine_dealloc,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE,
    0,
    (traverseproc) __Pyx_Coroutine_traverse,
    0,
    0,
    offsetof(__pyx_CoroutineObject, gi_weakreflist),
    0,
    (iternextfunc) __Pyx_Generator_Next,
    __pyx_Generator_methods,
    __pyx_Generator_memberlist,
    __pyx_Generator_getsets,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
#if CYTHON_USE_TP_FINALIZE
    0,
#else
    __Pyx_Coroutine_del,
#endif
    0,
#if CYTHON_USE_TP_FINALIZE
    __Pyx_Coroutine_del,
#elif 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_Generator_init(void) {
    __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
    __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter;
    __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type);
    if (unlikely(!__pyx_GeneratorType)) {
        return -1;
    }
    return 0;
}

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