/* Generated by Cython 3.0.0a11 */

/* BEGIN: Cython Metadata
{
    "distutils": {
        "depends": [
            "/tmp/build-env-ns8d2qk1/lib/python3.10/site-packages/capnp/helpers/asyncHelper.h",
            "/tmp/build-env-ns8d2qk1/lib/python3.10/site-packages/capnp/helpers/asyncIoHelper.h",
            "/tmp/build-env-ns8d2qk1/lib/python3.10/site-packages/capnp/helpers/capabilityHelper.cpp",
            "/tmp/build-env-ns8d2qk1/lib/python3.10/site-packages/capnp/helpers/capabilityHelper.h",
            "/tmp/build-env-ns8d2qk1/lib/python3.10/site-packages/capnp/helpers/checkCompiler.h",
            "/tmp/build-env-ns8d2qk1/lib/python3.10/site-packages/capnp/helpers/rpcHelper.h",
            "pytact/graph_api.capnp.h"
        ],
        "extra_compile_args": [
            "-O3",
            "-std=c++14"
        ],
        "include_dirs": [
            "pytact",
            "/tmp/build-env-ns8d2qk1/lib/python3.10/site-packages"
        ],
        "language": "c++",
        "libraries": [
            "capnpc",
            "capnp",
            "capnp-rpc"
        ],
        "name": "pytact.data_reader",
        "sources": [
            "pytact/data_reader.pyx",
            "pytact/graph_api.capnp.cpp"
        ]
    },
    "module_name": "pytact.data_reader"
}
END: Cython Metadata */

#ifndef PY_SSIZE_T_CLEAN
#define PY_SSIZE_T_CLEAN
#endif /* PY_SSIZE_T_CLEAN */
#if defined(CYTHON_LIMITED_API) && 0
  #ifndef Py_LIMITED_API
    #if CYTHON_LIMITED_API+0 > 0x03030000
      #define Py_LIMITED_API CYTHON_LIMITED_API
    #else
      #define Py_LIMITED_API 0x03030000
    #endif
  #endif
#endif

#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 < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
    #error Cython requires Python 2.7+ or Python 3.3+.
#else
#define CYTHON_ABI "3_0_0a11"
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
#define CYTHON_HEX_VERSION 0x030000AB
#define CYTHON_FUTURE_DIVISION 0
#include <stddef.h>
#ifndef offsetof
  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(_WIN32) && !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
  #define HAVE_LONG_LONG
#endif
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
  #define Py_HUGE_VAL HUGE_VAL
#endif
#if defined(GRAALVM_PYTHON)
  /* For very preliminary testing purposes. Most variables are set the same as PyPy.
     The existence of this section does not imply that anything works or is even tested */
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 1
  #define CYTHON_COMPILING_IN_NOGIL 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_TYPE_SPECS
  #define CYTHON_USE_TYPE_SPECS 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_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
  #endif
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #undef CYTHON_USE_MODULE_STATE
  #define CYTHON_USE_MODULE_STATE 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
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
  #endif
#elif defined(PYPY_VERSION)
  #define CYTHON_COMPILING_IN_PYPY 1
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_NOGIL 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_TYPE_SPECS
  #define CYTHON_USE_TYPE_SPECS 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_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
  #endif
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #undef CYTHON_USE_MODULE_STATE
  #define CYTHON_USE_MODULE_STATE 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
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
  #endif
#elif defined(CYTHON_LIMITED_API)
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 1
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_NOGIL 0
  #undef CYTHON_CLINE_IN_TRACEBACK
  #define CYTHON_CLINE_IN_TRACEBACK 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_TYPE_SPECS
  #define CYTHON_USE_TYPE_SPECS 1
  #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
  #undef CYTHON_USE_UNICODE_INTERNALS
  #define CYTHON_USE_UNICODE_INTERNALS 0
  #ifndef CYTHON_USE_UNICODE_WRITER
    #define CYTHON_USE_UNICODE_WRITER 0
  #endif
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #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_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #undef CYTHON_USE_MODULE_STATE
  #define CYTHON_USE_MODULE_STATE 1
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE 1
  #endif
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
  #endif
#elif defined(PY_NOGIL)
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_NOGIL 1
  #ifndef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #ifndef CYTHON_USE_ASYNC_SLOTS
    #define CYTHON_USE_ASYNC_SLOTS 1
  #endif
  #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
  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE 1
  #endif
  #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_CPYTHON 1
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_NOGIL 0
  #ifndef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #ifndef CYTHON_USE_TYPE_SPECS
    #define CYTHON_USE_TYPE_SPECS 0
  #endif
  #ifndef 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
  #ifndef 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 || PY_VERSION_HEX >= 0x030B00A2
    #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_GIL
    #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000)
  #endif
  #ifndef CYTHON_METH_FASTCALL
    #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1)
  #endif
  #ifndef CYTHON_FAST_PYCALL
    #define CYTHON_FAST_PYCALL 1
  #endif
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #if PY_VERSION_HEX < 0x03050000
    #undef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #ifndef CYTHON_USE_MODULE_STATE
    #define CYTHON_USE_MODULE_STATE 0
  #endif
  #if PY_VERSION_HEX < 0x030400a1
    #undef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE 0
  #elif !defined(CYTHON_USE_TP_FINALIZE)
    #define CYTHON_USE_TP_FINALIZE 1
  #endif
  #if PY_VERSION_HEX < 0x030600B1
    #undef CYTHON_USE_DICT_VERSIONS
    #define CYTHON_USE_DICT_VERSIONS 0
  #elif !defined(CYTHON_USE_DICT_VERSIONS)
    #define CYTHON_USE_DICT_VERSIONS 1
  #endif
  #if PY_VERSION_HEX < 0x030700A3
    #undef CYTHON_USE_EXC_INFO_STACK
    #define CYTHON_USE_EXC_INFO_STACK 0
  #elif !defined(CYTHON_USE_EXC_INFO_STACK)
    #define CYTHON_USE_EXC_INFO_STACK 1
  #endif
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
  #endif
#endif
#if !defined(CYTHON_FAST_PYCCALL)
#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if !defined(CYTHON_VECTORCALL)
#define CYTHON_VECTORCALL  (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1)
#endif
#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1)
#if CYTHON_USE_PYLONG_INTERNALS
  #if PY_MAJOR_VERSION < 3
    #include "longintrepr.h"
  #endif
  #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_UNUSED_VAR
#  if defined(__cplusplus)
     template<class T> void CYTHON_UNUSED_VAR( const T& ) { }
#  else
#    define CYTHON_UNUSED_VAR(x) (void)(x)
#  endif
#endif
#ifndef CYTHON_MAYBE_UNUSED_VAR
  #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
#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 short    uint16_t;
            typedef unsigned int      uint32_t;
        #else
            typedef unsigned __int8   uint8_t;
            typedef unsigned __int16  uint16_t;
            typedef unsigned __int32  uint32_t;
        #endif
    #endif
    #if _MSC_VER < 1300
        #ifdef _WIN64
            typedef unsigned long long  __pyx_uintptr_t;
        #else
            typedef unsigned int        __pyx_uintptr_t;
        #endif
    #else
        #ifdef _WIN64
            typedef unsigned __int64    __pyx_uintptr_t;
        #else
            typedef unsigned __int32    __pyx_uintptr_t;
        #endif
    #endif
#else
    #include <stdint.h>
    typedef uintptr_t  __pyx_uintptr_t;
#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_DefaultClassType PyClass_Type
  #define __Pyx_PyCode_New(a, p, 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)
#else
  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
  #define __Pyx_DefaultClassType PyType_Type
#if PY_VERSION_HEX >= 0x030B00A1
    static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
                                                    PyObject *code, PyObject *c, PyObject* n, PyObject *v,
                                                    PyObject *fv, PyObject *cell, PyObject* fn,
                                                    PyObject *name, int fline, PyObject *lnos) {
        PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
        PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
        const char *fn_cstr=NULL;
        const char *name_cstr=NULL;
        PyCodeObject* co=NULL;
        PyObject *type, *value, *traceback;
        PyErr_Fetch(&type, &value, &traceback);
        if (!(kwds=PyDict_New())) goto end;
        if (!(argcount=PyLong_FromLong(a))) goto end;
        if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
        if (!(posonlyargcount=PyLong_FromLong(p))) goto end;
        if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
        if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
        if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
        if (!(nlocals=PyLong_FromLong(l))) goto end;
        if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
        if (!(stacksize=PyLong_FromLong(s))) goto end;
        if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
        if (!(flags=PyLong_FromLong(f))) goto end;
        if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
        if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
        if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
        if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
        if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
        if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
        if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
        if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
        if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
        if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
        if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
        if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
        if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
        if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
        Py_XDECREF((PyObject*)co);
        co = (PyCodeObject*)call_result;
        call_result = NULL;
        if (0) {
            cleanup_code_too:
            Py_XDECREF((PyObject*)co);
            co = NULL;
        }
        end:
        Py_XDECREF(kwds);
        Py_XDECREF(argcount);
        Py_XDECREF(posonlyargcount);
        Py_XDECREF(kwonlyargcount);
        Py_XDECREF(nlocals);
        Py_XDECREF(stacksize);
        Py_XDECREF(replace);
        Py_XDECREF(call_result);
        Py_XDECREF(empty);
        if (type) {
            PyErr_Restore(type, value, traceback);
        }
        return co;
    }
#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
  #define __Pyx_PyCode_New(a, p, 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
#endif
#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
  #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
#else
  #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
  #define __Pyx_Py_Is(x, y)  Py_Is(x, y)
#else
  #define __Pyx_Py_Is(x, y) ((x) == (y))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
  #define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
#else
  #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
  #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
#else
  #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
  #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
#else
  #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
#endif
#define __Pyx_NoneAsNull(obj)  (__Pyx_Py_IsNone(obj) ? NULL : (obj))
#ifndef CO_COROUTINE
  #define CO_COROUTINE 0x80
#endif
#ifndef CO_ASYNC_GENERATOR
  #define CO_ASYNC_GENERATOR 0x200
#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_METH_FASTCALL
  #define __Pyx_METH_FASTCALL METH_FASTCALL
  #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
  #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
#else
  #define __Pyx_METH_FASTCALL METH_VARARGS
  #define __Pyx_PyCFunction_FastCall PyCFunction
  #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
#endif
#if CYTHON_VECTORCALL
  #define __pyx_vectorcallfunc vectorcallfunc
  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  PY_VECTORCALL_ARGUMENTS_OFFSET
  #define __Pyx_PyVectorcall_NARGS(n)  PyVectorcall_NARGS((size_t)(n))
#elif CYTHON_BACKPORT_VECTORCALL
  typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args,
                                            size_t nargsf, PyObject *kwnames);
  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  ((size_t)1 << (8 * sizeof(size_t) - 1))
  #define __Pyx_PyVectorcall_NARGS(n)  ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET))
#else
  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  0
  #define __Pyx_PyVectorcall_NARGS(n)  ((Py_ssize_t)(n))
#endif
#if PY_VERSION_HEX < 0x030900B1
  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  ((void)m, PyType_FromSpecWithBases(s, b))
  typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
#else
  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  PyType_FromModuleAndSpec(m, s, b)
  #define __Pyx_PyCMethod  PyCMethod
#endif
#ifndef METH_METHOD
  #define METH_METHOD 0x200
#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_LIMITED_API
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_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_COMPILING_IN_LIMITED_API
  #define __Pyx_PyThreadState_Current PyThreadState_Get()
#elif !CYTHON_FAST_THREAD_STATE
  #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 CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op)
{
    void *result;
    result = PyModule_GetState(op);
    if (!result)
        Py_FatalError("Couldn't find the module state");
    return result;
}
#endif
#define __Pyx_PyObject_GetSlot(obj, name, func_ctype)  __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype)
#if CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((func_ctype) PyType_GetSlot((type), Py_##name))
#else
  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((type)->name)
#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 PY_MAJOR_VERSION < 3
    #if CYTHON_COMPILING_IN_PYPY
        #if PYPY_VERSION_NUM < 0x07030600
            #if defined(__cplusplus) && __cplusplus >= 201402L
                [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]]
            #elif defined(__GNUC__) || defined(__clang__)
                __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")))
            #elif defined(_MSC_VER)
                __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))
            #endif
            static CYTHON_INLINE int PyGILState_Check(void) {
                return 0;
            }
        #else  // PYPY_VERSION_NUM < 0x07030600
        #endif  // PYPY_VERSION_NUM < 0x07030600
    #else
        static CYTHON_INLINE int PyGILState_Check(void) {
            PyThreadState * tstate = _PyThreadState_Current;
            return tstate && (tstate == PyGILState_GetThisThreadState());
        }
    #endif
#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 > 0x030600B4 && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStrWithError(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
    PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
    if (res == NULL) PyErr_Clear();
    return res;
}
#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000)
#define __Pyx_PyDict_GetItemStrWithError  PyDict_GetItemWithError
#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
#else
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
#if CYTHON_COMPILING_IN_PYPY
    return PyDict_GetItem(dict, name);
#else
    PyDictEntry *ep;
    PyDictObject *mp = (PyDictObject*) dict;
    long hash = ((PyStringObject *) name)->ob_shash;
    assert(hash != -1);
    ep = (mp->ma_lookup)(mp, name, hash);
    if (ep == NULL) {
        return NULL;
    }
    return ep->me_value;
#endif
}
#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
#endif
#if CYTHON_USE_TYPE_SLOTS
  #define __Pyx_PyType_GetFlags(tp)   (((PyTypeObject *)tp)->tp_flags)
  #define __Pyx_PyType_HasFeature(type, feature)  ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
  #define __Pyx_PyObject_GetIterNextFunc(obj)  (Py_TYPE(obj)->tp_iternext)
#else
  #define __Pyx_PyType_GetFlags(tp)   (PyType_GetFlags((PyTypeObject *)tp))
  #define __Pyx_PyType_HasFeature(type, feature)  PyType_HasFeature(type, feature)
  #define __Pyx_PyObject_GetIterNextFunc(obj)  PyIter_Next
#endif
#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000
#define __Pyx_PyHeapTypeObject_GC_Del(obj)  {\
    PyTypeObject *type = Py_TYPE(obj);\
    assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
    PyObject_GC_Del(obj);\
    Py_DECREF(type);\
}
#else
#define __Pyx_PyHeapTypeObject_GC_Del(obj)  PyObject_GC_Del(obj)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
  #define CYTHON_PEP393_ENABLED 1
  #define __Pyx_PyUnicode_READY(op)       (0)
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GetLength(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((void)u, 1114111)
  #define __Pyx_PyUnicode_KIND(u)         ((void)u, (0))
  #define __Pyx_PyUnicode_DATA(u)         ((void*)u)
  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GetLength(u))
#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
  #define CYTHON_PEP393_ENABLED 1
  #if PY_VERSION_HEX >= 0x030C0000
    #define __Pyx_PyUnicode_READY(op)       (0)
  #else
    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                                0 : _PyUnicode_Ready((PyObject *)(op)))
  #endif
  #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)         ((int)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)
  #if PY_VERSION_HEX >= 0x030C0000
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
  #else
    #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
    #else
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
    #endif
  #endif
#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)         ((int)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
  #if !defined(PyUnicode_DecodeUnicodeEscape)
    #define PyUnicode_DecodeUnicodeEscape(s, size, errors)  PyUnicode_Decode(s, size, "unicode_escape", errors)
  #endif
  #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500)
    #undef PyUnicode_Contains
    #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
  #endif
  #if !defined(PyByteArray_Check)
    #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
  #endif
  #if !defined(PyObject_Format)
    #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
  #endif
#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
#ifndef PyObject_Unicode
  #define PyObject_Unicode             PyObject_Str
#endif
#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
#if CYTHON_COMPILING_IN_CPYTHON
  #define __Pyx_PySequence_ListKeepNew(obj)\
    (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
#else
  #define __Pyx_PySequence_ListKeepNew(obj)  PySequence_List(obj)
#endif
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        __Pyx_IS_TYPE(obj, &PySet_Type)
#endif
#if PY_VERSION_HEX >= 0x030900A4
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
#else
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
#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   __Pyx_PyIndex_AsHash_t
#else
  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsSsize_t
#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(WIN32) || defined(MS_WINDOWS)
  #if !defined(_USE_MATH_DEFINES)
    #define _USE_MATH_DEFINES
  #endif
#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_MARK_ERR_POS(f_index, lineno) \
    { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; }
#define __PYX_ERR(f_index, lineno, Ln_error) \
    { __PYX_MARK_ERR_POS(f_index, lineno) 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__pytact__data_reader
#define __PYX_HAVE_API__pytact__data_reader
/* Early includes */
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include "ios"
#include "new"
#include "stdexcept"
#include "typeinfo"
#include <vector>
#include <utility>

    #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)
    // move should be defined for these versions of MSVC, but __cplusplus isn't set usefully
    #include <type_traits>

    namespace cython_std {
    template <typename T> typename std::remove_reference<T>::type&& move(T& t) noexcept { return std::move(t); }
    template <typename T> typename std::remove_reference<T>::type&& move(T&& t) noexcept { return std::move(t); }
    }

    #endif
    
#include <unordered_set>
#include <stack>
#include "capnp/helpers/checkCompiler.h"
#include "capnp/helpers/capabilityHelper.h"
#include "capnp/helpers/rpcHelper.h"
#include "capnp/helpers/asyncHelper.h"
#include "capnp/dynamic.h"
#include "capnp/orphan.h"
#include "capnp/schema.h"
#include "capnp/any.h"
#include "capnp/blob.h"
#include "capnp/message.h"
#include "capnp/schema.capnp.h"
#include "capnp/common.h"
#include "kj/common.h"
#include "kj/array.h"
#include "capnp/serialize.h"
#include "capnp/serialize-packed.h"
#include "kj/string.h"
#include "kj/exception.h"
#include "kj/memory.h"
#include "kj/async.h"
#include "kj/string-tree.h"
#include "kj/time.h"
#include "kj/async-io.h"
#include "capnp/capability.h"
#include "capnp/rpc-twoparty.h"
#include "capnp/schema-parser.h"
#include "capnp/helpers/asyncIoHelper.h"
#include "capnp/helpers/fixMaybe.h"
#include "capnp/helpers/serialize.h"
#include "capnp/helpers/capabilityHelper.cpp"
#include "graph_api.capnp.h"
#include "capnp/list.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 1
#define __Pyx_PyObject_FromString __Pyx_PyStr_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyStr_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_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*)(__pyx_uintptr_t) __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)
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const wchar_t *u)
{
    const wchar_t *u_end = u;
    while (*u_end++) ;
    return (size_t)(u_end - u - 1);
}
#else
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);
}
#endif
#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);
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#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
#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; }

#if !CYTHON_USE_MODULE_STATE
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;
#endif
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * __pyx_cfilenm = __FILE__;
static const char *__pyx_filename;

/* #### Code section: filename_table ### */

static const char *__pyx_f[] = {
  "pytact/data_reader.pyx",
  "<stringsource>",
  "type.pxd",
  "capnp.pxd",
  "pytact/graph_api_capnp_cython.pxd",
};
/* #### Code section: utility_code_proto_before_types ### */
/* #### Code section: numeric_typedefs ### */

/* "capnp/includes/types.pxd":3
 * from cpython.ref cimport PyObject, Py_INCREF, Py_DECREF
 * from libc.stdint cimport *
 * ctypedef unsigned int uint             # <<<<<<<<<<<<<<
 * ctypedef uint8_t byte
 * ctypedef uint8_t UInt8
 */
typedef unsigned int __pyx_t_5capnp_8includes_5types_uint;

/* "capnp/includes/types.pxd":4
 * from libc.stdint cimport *
 * ctypedef unsigned int uint
 * ctypedef uint8_t byte             # <<<<<<<<<<<<<<
 * ctypedef uint8_t UInt8
 * ctypedef uint16_t UInt16
 */
typedef uint8_t __pyx_t_5capnp_8includes_5types_byte;

/* "capnp/includes/types.pxd":5
 * ctypedef unsigned int uint
 * ctypedef uint8_t byte
 * ctypedef uint8_t UInt8             # <<<<<<<<<<<<<<
 * ctypedef uint16_t UInt16
 * ctypedef uint32_t UInt32
 */
typedef uint8_t __pyx_t_5capnp_8includes_5types_UInt8;

/* "capnp/includes/types.pxd":6
 * ctypedef uint8_t byte
 * ctypedef uint8_t UInt8
 * ctypedef uint16_t UInt16             # <<<<<<<<<<<<<<
 * ctypedef uint32_t UInt32
 * ctypedef uint64_t UInt64
 */
typedef uint16_t __pyx_t_5capnp_8includes_5types_UInt16;

/* "capnp/includes/types.pxd":7
 * ctypedef uint8_t UInt8
 * ctypedef uint16_t UInt16
 * ctypedef uint32_t UInt32             # <<<<<<<<<<<<<<
 * ctypedef uint64_t UInt64
 * ctypedef int8_t Int8
 */
typedef uint32_t __pyx_t_5capnp_8includes_5types_UInt32;

/* "capnp/includes/types.pxd":8
 * ctypedef uint16_t UInt16
 * ctypedef uint32_t UInt32
 * ctypedef uint64_t UInt64             # <<<<<<<<<<<<<<
 * ctypedef int8_t Int8
 * ctypedef int16_t Int16
 */
typedef uint64_t __pyx_t_5capnp_8includes_5types_UInt64;

/* "capnp/includes/types.pxd":9
 * ctypedef uint32_t UInt32
 * ctypedef uint64_t UInt64
 * ctypedef int8_t Int8             # <<<<<<<<<<<<<<
 * ctypedef int16_t Int16
 * ctypedef int32_t Int32
 */
typedef int8_t __pyx_t_5capnp_8includes_5types_Int8;

/* "capnp/includes/types.pxd":10
 * ctypedef uint64_t UInt64
 * ctypedef int8_t Int8
 * ctypedef int16_t Int16             # <<<<<<<<<<<<<<
 * ctypedef int32_t Int32
 * ctypedef int64_t Int64
 */
typedef int16_t __pyx_t_5capnp_8includes_5types_Int16;

/* "capnp/includes/types.pxd":11
 * ctypedef int8_t Int8
 * ctypedef int16_t Int16
 * ctypedef int32_t Int32             # <<<<<<<<<<<<<<
 * ctypedef int64_t Int64
 * 
 */
typedef int32_t __pyx_t_5capnp_8includes_5types_Int32;

/* "capnp/includes/types.pxd":12
 * ctypedef int16_t Int16
 * ctypedef int32_t Int32
 * ctypedef int64_t Int64             # <<<<<<<<<<<<<<
 * 
 * ctypedef char * Object
 */
typedef int64_t __pyx_t_5capnp_8includes_5types_Int64;

/* "capnp/includes/types.pxd":15
 * 
 * ctypedef char * Object
 * ctypedef bint Bool             # <<<<<<<<<<<<<<
 * ctypedef float Float32
 * ctypedef double Float64
 */
typedef int __pyx_t_5capnp_8includes_5types_Bool;

/* "capnp/includes/types.pxd":16
 * ctypedef char * Object
 * ctypedef bint Bool
 * ctypedef float Float32             # <<<<<<<<<<<<<<
 * ctypedef double Float64
 * from libcpp cimport bool as cbool
 */
typedef float __pyx_t_5capnp_8includes_5types_Float32;

/* "capnp/includes/types.pxd":17
 * ctypedef bint Bool
 * ctypedef float Float32
 * ctypedef double Float64             # <<<<<<<<<<<<<<
 * from libcpp cimport bool as cbool
 */
typedef double __pyx_t_5capnp_8includes_5types_Float64;

/* "pytact/data_reader.pyx":289
 * ProofStateId = int
 * TacticId = int
 * ctypedef uint32_t GraphId             # <<<<<<<<<<<<<<
 * ctypedef uint32_t NodeId
 * NodeHash = int
 */
typedef uint32_t __pyx_t_6pytact_11data_reader_GraphId;

/* "pytact/data_reader.pyx":290
 * TacticId = int
 * ctypedef uint32_t GraphId
 * ctypedef uint32_t NodeId             # <<<<<<<<<<<<<<
 * NodeHash = int
 * 
 */
typedef uint32_t __pyx_t_6pytact_11data_reader_NodeId;
/* #### Code section: complex_type_declarations ### */
/* #### Code section: type_declarations ### */

/*--- Type declarations ---*/
struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField;
struct __pyx_obj_5capnp_3lib_5capnp__StringArrayPtr;
struct __pyx_obj_5capnp_3lib_5capnp_SchemaParser;
struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan;
struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader;
struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder;
struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField;
struct __pyx_obj_5capnp_3lib_5capnp__Schema;
struct __pyx_obj_5capnp_3lib_5capnp__InterfaceSchema;
struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnum;
struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder;
struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_IntP_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_FloatP_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Tactic_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Term_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_DataVersion_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Dataset_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Exception_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint16_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint32_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint64_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Int64_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_String_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader_List;
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader_List;
struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader;
struct __pyx_obj_6pytact_11data_reader_Node;
struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List;
struct __pyx_obj_6pytact_11data_reader_Node_List;
struct __pyx_obj_6pytact_11data_reader_ProofState;
struct __pyx_obj_6pytact_11data_reader_ProofState_List;
struct __pyx_obj_6pytact_11data_reader_Argument_List;
struct __pyx_obj_6pytact_11data_reader_Outcome;
struct __pyx_obj_6pytact_11data_reader_Outcome_List;
struct __pyx_obj_6pytact_11data_reader_ProofStep;
struct __pyx_obj_6pytact_11data_reader_ProofStep_List;
struct __pyx_obj_6pytact_11data_reader_Representative_List;
struct __pyx_obj_6pytact_11data_reader_Definition;
struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List;
struct __pyx_obj_6pytact_11data_reader_Dataset;
struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context;
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context;

/* "capnp/includes/types.pxd":14
 * ctypedef int64_t Int64
 * 
 * ctypedef char * Object             # <<<<<<<<<<<<<<
 * ctypedef bint Bool
 * ctypedef float Float32
 */
typedef char *__pyx_t_5capnp_8includes_5types_Object;

/* "capnp/includes/capnp_cpp.pxd":76
 *         Promise[T] attach(Own[PyRefCounter] &, Own[PyRefCounter] &, Own[PyRefCounter] &, Own[PyRefCounter] &)
 * 
 * ctypedef Promise[PyObject *] PyPromise             # <<<<<<<<<<<<<<
 * ctypedef Promise[void] VoidPromise
 * 
 */
typedef  ::kj::Promise<PyObject *>  __pyx_t_5capnp_8includes_9capnp_cpp_PyPromise;

/* "capnp/includes/capnp_cpp.pxd":77
 * 
 * ctypedef Promise[PyObject *] PyPromise
 * ctypedef Promise[void] VoidPromise             # <<<<<<<<<<<<<<
 * 
 * cdef extern from "kj/string-tree.h" namespace " ::kj":
 */
typedef  ::kj::Promise<void>  __pyx_t_5capnp_8includes_9capnp_cpp_VoidPromise;

/* "capnp/includes/capnp_cpp.pxd":108
 *     ctypedef Array[PyObject *] PyArray' ::kj::Array<PyObject *>'
 * 
 * ctypedef Promise[PyArray] PyPromiseArray             # <<<<<<<<<<<<<<
 * 
 * cdef extern from "kj/time.h" namespace " ::kj":
 */
typedef  ::kj::Promise< ::kj::Array<PyObject *>>  __pyx_t_5capnp_8includes_9capnp_cpp_PyPromiseArray;
struct __pyx_opt_args_5capnp_3lib_5capnp_18_StructSchemaField__init;
struct __pyx_opt_args_5capnp_3lib_5capnp_20_DynamicStructReader__init;
struct __pyx_opt_args_5capnp_3lib_5capnp_20_DynamicStructReader_as_builder;
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder__init;
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder_init;
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder__init_by_field;
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder_copy;

/* "capnp/lib/capnp.pxd":26
 *     cdef C_StructSchema.Field thisptr
 *     cdef object _parent
 *     cdef _init(self, C_StructSchema.Field other, parent=?)             # <<<<<<<<<<<<<<
 * 
 * cdef class _StringArrayPtr:
 */
struct __pyx_opt_args_5capnp_3lib_5capnp_18_StructSchemaField__init {
  int __pyx_n;
  PyObject *parent;
};

/* "capnp/lib/capnp.pxd":58
 *     cdef object _schema
 * 
 *     cdef _init(self, C_DynamicStruct.Reader other, object parent, bint isRoot=?, bint tryRegistry=?)             # <<<<<<<<<<<<<<
 * 
 *     cpdef _get(self, field)
 */
struct __pyx_opt_args_5capnp_3lib_5capnp_20_DynamicStructReader__init {
  int __pyx_n;
  int isRoot;
  int tryRegistry;
};

/* "capnp/lib/capnp.pxd":67
 *     cpdef _has_by_field(self, _StructSchemaField field)
 * 
 *     cpdef as_builder(self, num_first_segment_words=?)             # <<<<<<<<<<<<<<
 * 
 * 
 */
struct __pyx_opt_args_5capnp_3lib_5capnp_20_DynamicStructReader_as_builder {
  int __pyx_n;
  PyObject *num_first_segment_words;
};

/* "capnp/lib/capnp.pxd":77
 *     cdef object _schema
 * 
 *     cdef _init(self, DynamicStruct_Builder other, object parent, bint isRoot=?, bint tryRegistry=?)             # <<<<<<<<<<<<<<
 * 
 *     cdef _check_write(self)
 */
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder__init {
  int __pyx_n;
  int isRoot;
  int tryRegistry;
};

/* "capnp/lib/capnp.pxd":88
 *     cpdef _set(self, field, value)
 *     cpdef _has(self, field)
 *     cpdef init(self, field, size=?)             # <<<<<<<<<<<<<<
 *     cpdef _get_by_field(self, _StructSchemaField field)
 *     cpdef _set_by_field(self, _StructSchemaField field, value)
 */
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder_init {
  int __pyx_n;
  PyObject *size;
};

/* "capnp/lib/capnp.pxd":92
 *     cpdef _set_by_field(self, _StructSchemaField field, value)
 *     cpdef _has_by_field(self, _StructSchemaField field)
 *     cpdef _init_by_field(self, _StructSchemaField field, size=?)             # <<<<<<<<<<<<<<
 *     cpdef init_resizable_list(self, field)
 *     cpdef _DynamicEnumField _which(self)
 */
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder__init_by_field {
  int __pyx_n;
  PyObject *size;
};

/* "capnp/lib/capnp.pxd":100
 * 
 *     cpdef as_reader(self)
 *     cpdef copy(self, num_first_segment_words=?)             # <<<<<<<<<<<<<<
 * 
 * cdef class _DynamicEnumField:
 */
struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder_copy {
  int __pyx_n;
  PyObject *num_first_segment_words;
};
struct __pyx_t_6pytact_11data_reader_GraphIndex;
struct __pyx_t_6pytact_11data_reader_GlobalNode;

/* "pytact/data_reader.pyx":139
 *                 yield apic.Dataset_Reader(g)
 * 
 * cdef struct GraphIndex:             # <<<<<<<<<<<<<<
 *     vector[C_Graph_Node_Reader_List] nodes
 *     vector[C_Graph_EdgeTarget_Reader_List] edges
 */
struct __pyx_t_6pytact_11data_reader_GraphIndex {
  std::vector< ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader>  nodes;
  std::vector< ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader>  edges;
  std::vector<uint32_t>  representatives;
  std::vector<std::vector<uint32_t> >  local_to_global;
};

/* "pytact/data_reader.pyx":1646
 *         yield GlobalContextSets(Map(), None, lambda _: False)
 * 
 * cdef struct GlobalNode:             # <<<<<<<<<<<<<<
 *     GraphId graphid
 *     NodeId nodeid
 */
struct __pyx_t_6pytact_11data_reader_GlobalNode {
  __pyx_t_6pytact_11data_reader_GraphId graphid;
  __pyx_t_6pytact_11data_reader_NodeId nodeid;
};

/* "capnp/lib/capnp.pxd":23
 * 
 * 
 * cdef class _StructSchemaField:             # <<<<<<<<<<<<<<
 *     cdef C_StructSchema.Field thisptr
 *     cdef object _parent
 */
struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__StructSchemaField *__pyx_vtab;
   ::capnp::StructSchema::Field thisptr;
  PyObject *_parent;
};


/* "capnp/lib/capnp.pxd":28
 *     cdef _init(self, C_StructSchema.Field other, parent=?)
 * 
 * cdef class _StringArrayPtr:             # <<<<<<<<<<<<<<
 *     cdef StringPtr * thisptr
 *     cdef object parent
 */
struct __pyx_obj_5capnp_3lib_5capnp__StringArrayPtr {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__StringArrayPtr *__pyx_vtab;
   ::kj::StringPtr *thisptr;
  PyObject *parent;
  size_t size;
};


/* "capnp/lib/capnp.pxd":34
 *     cdef ArrayPtr[StringPtr] asArrayPtr(self) except +reraise_kj_exception
 * 
 * cdef class SchemaParser:             # <<<<<<<<<<<<<<
 *     cdef C_SchemaParser * thisptr
 *     cdef public dict modules_by_id
 */
struct __pyx_obj_5capnp_3lib_5capnp_SchemaParser {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp_SchemaParser *__pyx_vtab;
   ::capnp::SchemaParser *thisptr;
  PyObject *modules_by_id;
  PyObject *_all_imports;
  struct __pyx_obj_5capnp_3lib_5capnp__StringArrayPtr *_last_import_array;
};


/* "capnp/lib/capnp.pxd":41
 *     cpdef _parse_disk_file(self, displayName, diskPath, imports) except +reraise_kj_exception
 * 
 * cdef class _DynamicOrphan:             # <<<<<<<<<<<<<<
 *     cdef C_DynamicOrphan thisptr
 *     cdef public object _parent
 */
struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicOrphan *__pyx_vtab;
   ::capnp::Orphan< ::capnp::DynamicValue> thisptr;
  PyObject *_parent;
};


/* "capnp/lib/capnp.pxd":51
 * 
 * 
 * cdef class _DynamicStructReader:             # <<<<<<<<<<<<<<
 *     cdef C_DynamicStruct.Reader thisptr
 *     cdef public object _parent
 */
struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructReader *__pyx_vtab;
   ::capnp::DynamicStruct::Reader thisptr;
  PyObject *_parent;
  int is_root;
  PyObject *_obj_to_pin;
  PyObject *_schema;
};


/* "capnp/lib/capnp.pxd":70
 * 
 * 
 * cdef class _DynamicStructBuilder:             # <<<<<<<<<<<<<<
 *     cdef DynamicStruct_Builder thisptr
 *     cdef public object _parent
 */
struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructBuilder *__pyx_vtab;
   ::capnp::DynamicStruct::Builder thisptr;
  PyObject *_parent;
  int is_root;
  int _is_written;
  PyObject *_schema;
};


/* "capnp/lib/capnp.pxd":102
 *     cpdef copy(self, num_first_segment_words=?)
 * 
 * cdef class _DynamicEnumField:             # <<<<<<<<<<<<<<
 *     cdef object thisptr
 * 
 */
struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnumField *__pyx_vtab;
  PyObject *thisptr;
};


/* "capnp/lib/capnp.pxd":108
 *     cpdef _str(self)
 * 
 * cdef class _Schema:             # <<<<<<<<<<<<<<
 *     cdef C_Schema thisptr
 * 
 */
struct __pyx_obj_5capnp_3lib_5capnp__Schema {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__Schema *__pyx_vtab;
   ::capnp::Schema thisptr;
};


/* "capnp/lib/capnp.pxd":119
 *     cpdef get_proto(self)
 * 
 * cdef class _InterfaceSchema:             # <<<<<<<<<<<<<<
 *     cdef C_InterfaceSchema thisptr
 *     cdef object __method_names, __method_names_inherited, __methods, __methods_inherited
 */
struct __pyx_obj_5capnp_3lib_5capnp__InterfaceSchema {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__InterfaceSchema *__pyx_vtab;
   ::capnp::InterfaceSchema thisptr;
  PyObject *_InterfaceSchema__method_names;
  PyObject *_InterfaceSchema__method_names_inherited;
  PyObject *_InterfaceSchema__methods;
  PyObject *_InterfaceSchema__methods_inherited;
};


/* "capnp/lib/capnp.pxd":124
 *     cdef _init(self, C_InterfaceSchema other)
 * 
 * cdef class _DynamicEnum:             # <<<<<<<<<<<<<<
 *     cdef capnp.DynamicEnum thisptr
 *     cdef public object _parent
 */
struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnum {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnum *__pyx_vtab;
   ::capnp::DynamicEnum thisptr;
  PyObject *_parent;
};


/* "capnp/lib/capnp.pxd":131
 *     cpdef _as_str(self) except +reraise_kj_exception
 * 
 * cdef class _DynamicListBuilder:             # <<<<<<<<<<<<<<
 *     cdef C_DynamicList.Builder thisptr
 *     cdef public object _parent
 */
struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicListBuilder *__pyx_vtab;
   ::capnp::DynamicList::Builder thisptr;
  PyObject *_parent;
};


/* "capnp/lib/capnp.pxd":144
 *     cpdef init(self, index, size)
 * 
 * cdef class _MessageBuilder:             # <<<<<<<<<<<<<<
 *     cdef schema_cpp.MessageBuilder * thisptr
 *     cpdef init_root(self, schema)
 */
struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder {
  PyObject_HEAD
  struct __pyx_vtabstruct_5capnp_3lib_5capnp__MessageBuilder *__pyx_vtab;
   ::capnp::MessageBuilder *thisptr;
};


/* "pytact/graph_api_capnp_cython.pxd":561
 *         uint size()
 * 
 * cdef class Graph_Node_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Node_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader *__pyx_vtab;
  Graph::Node::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":567
 *     cdef init(C_Graph_Node_Reader source, object root)
 * 
 * cdef class Graph_EdgeTarget_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_EdgeTarget_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader *__pyx_vtab;
  Graph::EdgeTarget::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":573
 *     cdef init(C_Graph_EdgeTarget_Reader source, object root)
 * 
 * cdef class Graph_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Reader *__pyx_vtab;
  Graph::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":579
 *     cdef init(C_Graph_Reader source, object root)
 * 
 * cdef class IntP_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_IntP_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_IntP_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_IntP_Reader *__pyx_vtab;
  IntP::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":585
 *     cdef init(C_IntP_Reader source, object root)
 * 
 * cdef class Definition_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Definition_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Reader *__pyx_vtab;
  Definition::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":591
 *     cdef init(C_Definition_Reader source, object root)
 * 
 * cdef class FloatP_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_FloatP_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_FloatP_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_FloatP_Reader *__pyx_vtab;
  FloatP::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":597
 *     cdef init(C_FloatP_Reader source, object root)
 * 
 * cdef class Graph_Node_Label_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Node_Label_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader *__pyx_vtab;
  Graph::Node::Label::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":603
 *     cdef init(C_Graph_Node_Label_Reader source, object root)
 * 
 * cdef class Definition_Status_Substituted_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Definition_Status_Substituted_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader *__pyx_vtab;
  Definition::Status::Substituted::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":609
 *     cdef init(C_Definition_Status_Substituted_Reader source, object root)
 * 
 * cdef class Definition_Status_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Definition_Status_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Reader *__pyx_vtab;
  Definition::Status::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":615
 *     cdef init(C_Definition_Status_Reader source, object root)
 * 
 * cdef class ProofStep_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofStep_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader *__pyx_vtab;
  ProofStep::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":621
 *     cdef init(C_ProofStep_Reader source, object root)
 * 
 * cdef class Tactic_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Tactic_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Tactic_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Tactic_Reader *__pyx_vtab;
  Tactic::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":627
 *     cdef init(C_Tactic_Reader source, object root)
 * 
 * cdef class ProofStep_Tactic_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofStep_Tactic_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader *__pyx_vtab;
  ProofStep::Tactic::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":633
 *     cdef init(C_ProofStep_Tactic_Reader source, object root)
 * 
 * cdef class Outcome_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Outcome_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader *__pyx_vtab;
  Outcome::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":639
 *     cdef init(C_Outcome_Reader source, object root)
 * 
 * cdef class Outcome_Term_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Outcome_Term_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader *__pyx_vtab;
  Outcome::Term::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":645
 *     cdef init(C_Outcome_Term_Reader source, object root)
 * 
 * cdef class ProofState_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofState_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader *__pyx_vtab;
  ProofState::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":651
 *     cdef init(C_ProofState_Reader source, object root)
 * 
 * cdef class Argument_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Argument_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader *__pyx_vtab;
  Argument::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":657
 *     cdef init(C_Argument_Reader source, object root)
 * 
 * cdef class ProofState_Root_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofState_Root_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader *__pyx_vtab;
  ProofState::Root::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":663
 *     cdef init(C_ProofState_Root_Reader source, object root)
 * 
 * cdef class Node_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Node_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader *__pyx_vtab;
  Node::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":669
 *     cdef init(C_Node_Reader source, object root)
 * 
 * cdef class Argument_Term_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Argument_Term_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Term_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Term_Reader *__pyx_vtab;
  Argument::Term::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":675
 *     cdef init(C_Argument_Term_Reader source, object root)
 * 
 * cdef class Graph_EdgeTarget_Target_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_EdgeTarget_Target_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader *__pyx_vtab;
  Graph::EdgeTarget::Target::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":681
 *     cdef init(C_Graph_EdgeTarget_Target_Reader source, object root)
 * 
 * cdef class AbstractTactic_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_AbstractTactic_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader *__pyx_vtab;
  AbstractTactic::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":687
 *     cdef init(C_AbstractTactic_Reader source, object root)
 * 
 * cdef class DataVersion_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_DataVersion_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_DataVersion_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_DataVersion_Reader *__pyx_vtab;
  DataVersion::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":693
 *     cdef init(C_DataVersion_Reader source, object root)
 * 
 * cdef class Dataset_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Dataset_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Dataset_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Dataset_Reader *__pyx_vtab;
  Dataset::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":699
 *     cdef init(C_Dataset_Reader source, object root)
 * 
 * cdef class Exception_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Exception_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Exception_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Exception_Reader *__pyx_vtab;
  Exception::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":705
 *     cdef init(C_Exception_Reader source, object root)
 * 
 * cdef class ExecutionResult_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ExecutionResult_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader *__pyx_vtab;
  ExecutionResult::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":711
 *     cdef init(C_ExecutionResult_Reader source, object root)
 * 
 * cdef class ExecutionResult_NewState_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ExecutionResult_NewState_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader *__pyx_vtab;
  ExecutionResult::NewState::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":717
 *     cdef init(C_ExecutionResult_NewState_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader *__pyx_vtab;
  PredictionProtocol::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":723
 *     cdef init(C_PredictionProtocol_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Request_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Request_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader *__pyx_vtab;
  PredictionProtocol::Request::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":729
 *     cdef init(C_PredictionProtocol_Request_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Request_Initialize_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Request_Initialize_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader *__pyx_vtab;
  PredictionProtocol::Request::Initialize::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":735
 *     cdef init(C_PredictionProtocol_Request_Initialize_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Request_Predict_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Request_Predict_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader *__pyx_vtab;
  PredictionProtocol::Request::Predict::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":741
 *     cdef init(C_PredictionProtocol_Request_Predict_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Prediction_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Prediction_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader *__pyx_vtab;
  PredictionProtocol::Prediction::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":747
 *     cdef init(C_PredictionProtocol_Prediction_Reader source, object root)
 * 
 * cdef class PredictionProtocol_TextPrediction_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_TextPrediction_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader *__pyx_vtab;
  PredictionProtocol::TextPrediction::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":753
 *     cdef init(C_PredictionProtocol_TextPrediction_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Response_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Response_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader *__pyx_vtab;
  PredictionProtocol::Response::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":759
 *     cdef init(C_PredictionProtocol_Response_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Response_Alignment_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Response_Alignment_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader *__pyx_vtab;
  PredictionProtocol::Response::Alignment::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":765
 *     cdef init(C_PredictionProtocol_Response_Alignment_Reader source, object root)
 * 
 * cdef class ConflatableEdges_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ConflatableEdges_Reader source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader *__pyx_vtab;
  ConflatableEdges::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":771
 *     cdef init(C_ConflatableEdges_Reader source, object root)
 * 
 * cdef class Uint16_List:             # <<<<<<<<<<<<<<
 *     cdef C_Uint16_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint16_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint16_List *__pyx_vtab;
   ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":777
 *     cdef init(C_Uint16_List source, object root)
 * 
 * cdef class Uint32_List:             # <<<<<<<<<<<<<<
 *     cdef C_Uint32_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint32_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint32_List *__pyx_vtab;
   ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":783
 *     cdef init(C_Uint32_List source, object root)
 * 
 * cdef class Uint64_List:             # <<<<<<<<<<<<<<
 *     cdef C_Uint64_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint64_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint64_List *__pyx_vtab;
   ::capnp::List<uint64_t, ::capnp::Kind::PRIMITIVE>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":789
 *     cdef init(C_Uint64_List source, object root)
 * 
 * cdef class Int64_List:             # <<<<<<<<<<<<<<
 *     cdef C_Int64_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Int64_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Int64_List *__pyx_vtab;
   ::capnp::List<int64_t, ::capnp::Kind::PRIMITIVE>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":795
 *     cdef init(C_Int64_List source, object root)
 * 
 * cdef class String_List:             # <<<<<<<<<<<<<<
 *     cdef C_String_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_String_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_String_List *__pyx_vtab;
   ::capnp::List<capnp::Text, ::capnp::Kind::BLOB>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":800
 *     @staticmethod
 *     cdef init(C_String_List source, object root)
 * cdef class PredictionProtocol_Prediction_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Prediction_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List *__pyx_vtab;
   ::capnp::List<PredictionProtocol::Prediction, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":805
 *     @staticmethod
 *     cdef init(C_PredictionProtocol_Prediction_Reader_List source, object root)
 * cdef class Graph_Node_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Node_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List *__pyx_vtab;
   ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":810
 *     @staticmethod
 *     cdef init(C_Graph_Node_Reader_List source, object root)
 * cdef class AbstractTactic_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_AbstractTactic_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List *__pyx_vtab;
   ::capnp::List<AbstractTactic, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":815
 *     @staticmethod
 *     cdef init(C_AbstractTactic_Reader_List source, object root)
 * cdef class ProofStep_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_ProofStep_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List *__pyx_vtab;
   ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":820
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader_List source, object root)
 * cdef class PredictionProtocol_TextPrediction_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_TextPrediction_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List *__pyx_vtab;
   ::capnp::List<PredictionProtocol::TextPrediction, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":825
 *     @staticmethod
 *     cdef init(C_PredictionProtocol_TextPrediction_Reader_List source, object root)
 * cdef class ProofState_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_ProofState_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader_List *__pyx_vtab;
   ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":830
 *     @staticmethod
 *     cdef init(C_ProofState_Reader_List source, object root)
 * cdef class Graph_EdgeTarget_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_EdgeTarget_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List *__pyx_vtab;
   ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":835
 *     @staticmethod
 *     cdef init(C_Graph_EdgeTarget_Reader_List source, object root)
 * cdef class Argument_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Argument_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader_List *__pyx_vtab;
   ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":840
 *     @staticmethod
 *     cdef init(C_Argument_Reader_List source, object root)
 * cdef class Outcome_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Outcome_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader_List *__pyx_vtab;
   ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/graph_api_capnp_cython.pxd":845
 *     @staticmethod
 *     cdef init(C_Outcome_Reader_List source, object root)
 * cdef class Node_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Node_Reader_List source
 *     cdef object root
 */
struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader_List *__pyx_vtab;
   ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader source;
  PyObject *root;
};


/* "pytact/data_reader.pyx":145
 *     vector[vector[uint32_t]] local_to_global
 * 
 * cdef class LowlevelDataReader:             # <<<<<<<<<<<<<<
 *     """A thin wrapper around the raw Cap'n Proto structures contained in a dataset directory.
 * 
 */
struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader {
  PyObject_HEAD
  struct __pyx_t_6pytact_11data_reader_GraphIndex graph_index;
  PyObject *graphs;
  PyObject *graphid_by_filename;
  PyObject *graph_files;
};


/* "pytact/data_reader.pyx":293
 * NodeHash = int
 * 
 * cdef class Node:             # <<<<<<<<<<<<<<
 *     """A node in the calculus of inductive construction graph.
 * 
 */
struct __pyx_obj_6pytact_11data_reader_Node {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Node *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
  Graph::Node::Reader node;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  __pyx_t_6pytact_11data_reader_NodeId nodeid;
};


/* "pytact/data_reader.pyx":391
 *             return None
 * 
 * cdef class EdgeTarget_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Graph_EdgeTarget_Reader_List edges
 */
struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_EdgeTarget_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader edges;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  uint32_t start;
  uint16_t count;
};


/* "pytact/data_reader.pyx":422
 *         return self.count
 * 
 * cdef class Node_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Node_Reader_List reader
 */
struct __pyx_obj_6pytact_11data_reader_Node_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Node_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
};


/* "pytact/data_reader.pyx":447
 *         return self.reader.size()
 * 
 * cdef class ProofState:             # <<<<<<<<<<<<<<
 *     """A proof state represents a particular point in the tactical proof of a constant."""
 * 
 */
struct __pyx_obj_6pytact_11data_reader_ProofState {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_ProofState *__pyx_vtab;
  ProofState::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
};


/* "pytact/data_reader.pyx":534
 *         return self.reader.getId()
 * 
 * cdef class ProofState_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_ProofState_Reader_List reader
 */
struct __pyx_obj_6pytact_11data_reader_ProofState_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_ProofState_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
};


/* "pytact/data_reader.pyx":556
 *         return self.reader.size()
 * 
 * cdef class Argument_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Argument_Reader_List reader
 */
struct __pyx_obj_6pytact_11data_reader_Argument_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Argument_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
};


/* "pytact/data_reader.pyx":588
 * Unresolvable: TypeAlias = None
 * Unknown: TypeAlias = None
 * cdef class Outcome:             # <<<<<<<<<<<<<<
 *     """An outcome is the result of running a tactic on a proof state. A tactic may run on multiple proof states."""
 * 
 */
struct __pyx_obj_6pytact_11data_reader_Outcome {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Outcome *__pyx_vtab;
  Outcome::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
  PyObject *tactic;
};


/* "pytact/data_reader.pyx":655
 *         return Argument_List.init(args, graph_index, graph)
 * 
 * cdef class Outcome_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Outcome_Reader_List reader
 */
struct __pyx_obj_6pytact_11data_reader_Outcome_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Outcome_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  PyObject *tactic;
};


/* "pytact/data_reader.pyx":679
 *         return self.reader.size()
 * 
 * cdef class ProofStep:             # <<<<<<<<<<<<<<
 *     """A proof step is the execution of a single tactic on one or more proof states, producing a list of outcomes.
 *     """
 */
struct __pyx_obj_6pytact_11data_reader_ProofStep {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep *__pyx_vtab;
  ProofStep::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
};


/* "pytact/data_reader.pyx":724
 *         return Outcome_List.init(self.reader.getOutcomes(), self.tactic, self.graph_index, self.graph)
 * 
 * cdef class ProofStep_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_ProofStep_Reader_List reader
 */
struct __pyx_obj_6pytact_11data_reader_ProofStep_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
};


/* "pytact/data_reader.pyx":746
 *         return self.reader.size()
 * 
 * cdef class Representative_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Uint16_List reader
 */
struct __pyx_obj_6pytact_11data_reader_Representative_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Representative_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
};


/* "pytact/data_reader.pyx":801
 *     proof: Sequence[ProofStep]
 * 
 * cdef class Definition:             # <<<<<<<<<<<<<<
 *     """A definition of the CIC, which is either a constant, inductive, constructor, projection or section
 *     variable. Constants and section variables can have tactical proofs associated to them.
 */
struct __pyx_obj_6pytact_11data_reader_Definition {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Definition *__pyx_vtab;
  Definition::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
  struct __pyx_obj_6pytact_11data_reader_Node *node;
};


/* "pytact/data_reader.pyx":1074
 *             yield cluster
 * 
 * cdef class Dataset_Definition_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Uint32_List reader
 */
struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Dataset_Definition_List *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
   ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader reader;
  __pyx_t_6pytact_11data_reader_GraphId graph;
};


/* "pytact/data_reader.pyx":1096
 *         return self.reader.size()
 * 
 * cdef class Dataset:             # <<<<<<<<<<<<<<
 *     """The data corresponding to a single Coq source file. The data contains a representation of all definitions
 *     that have existed at any point throughout the compilation of the source file.
 */
struct __pyx_obj_6pytact_11data_reader_Dataset {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_Dataset *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *graph_index;
  __pyx_t_6pytact_11data_reader_GraphId graph;
  Dataset::Reader reader;
  PyObject *filename;
};


/* "pytact/data_reader.pyx":1226
 *         yield lowlevel_to_highlevel(lreader)
 * 
 * cdef class OnlineDefinitionsReader:             # <<<<<<<<<<<<<<
 * 
 *     cdef GraphIndex graph_index
 */
struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader {
  PyObject_HEAD
  struct __pyx_vtabstruct_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_vtab;
  struct __pyx_t_6pytact_11data_reader_GraphIndex graph_index;
};


/* "pytact/data_reader.pyx":122
 *         return self._count
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def file_dataset_reader(fname: Path) -> Generator[Any, None, None]:
 *     """Load a single dataset file into memory, and expose it's raw Cap'n Proto structures.
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader {
  PyObject_HEAD
  PyObject *__pyx_v_create_mmap;
  PyObject *__pyx_v_fname;
  PyObject *__pyx_v_g;
  PyObject *__pyx_v_mm;
  PyObject *__pyx_v_mv;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
  PyObject *__pyx_t_4;
  PyObject *__pyx_t_5;
  PyObject *__pyx_t_6;
  PyObject *__pyx_t_7;
  PyObject *__pyx_t_8;
  PyObject *__pyx_t_9;
  PyObject *__pyx_t_10;
  PyObject *__pyx_t_11;
};


/* "pytact/data_reader.pyx":248
 *         return dataset_path
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def lowlevel_data_reader(dataset_path: Path) -> Generator[LowlevelDataReader, None, None]:
 *     """Map a directory of dataset files into memory, and expose their raw Cap'n Proto structures.
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader {
  PyObject_HEAD
  PyObject *__pyx_v_dataset;
  PyObject *__pyx_v_dataset_path;
  struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_dr;
  PyObject *__pyx_8genexpr5__pyx_v_f;
  PyObject *__pyx_8genexpr6__pyx_v_fname;
  PyObject *__pyx_v_fnames;
  PyObject *__pyx_v_hard;
  PyObject *__pyx_v_mountpoint;
  PyObject *__pyx_v_new_soft;
  PyObject *__pyx_v_soft;
  PyObject *__pyx_v_stack;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
};


/* "pytact/data_reader.pyx":875
 *         return Representative_List.init(self.reader.getExternalPrevious(), self.graph_index, self.graph)
 * 
 *     def _global_context(self, across_files : bool, inclusive, seen : set[Node]):             # <<<<<<<<<<<<<<
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context {
  PyObject_HEAD
  PyObject *__pyx_v_across_files;
  PyObject *__pyx_v_d;
  PyObject *__pyx_v_eprev;
  PyObject *__pyx_v_inclusive;
  PyObject *__pyx_v_seen;
  struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "pytact/data_reader.pyx":1018
 *         else: return self
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster(self) -> Iterable[Definition]:
 *         """The cluster of mutually recursive definitions that this definition is part of.
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ {
  PyObject_HEAD
  PyObject *__pyx_v_current;
  PyObject *__pyx_v_repr_node;
  PyObject *__pyx_v_representative;
  struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self;
};


/* "pytact/data_reader.pyx":1057
 *         return self.graph_index.representatives[self.graph] == self.node.nodeid
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def _group_by_clusters(cls, definitions : Iterable[Definition]) -> Iterable[list[Definition]]:
 *         definitions_it = iter(definitions)
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters {
  PyObject_HEAD
  PyTypeObject *__pyx_v_cls;
  PyObject *__pyx_v_cluster;
  PyObject *__pyx_v_definitions;
  PyObject *__pyx_v_definitions_it;
  PyObject *__pyx_v_n;
  PyObject *__pyx_v_node;
  PyObject *__pyx_v_rep;
};


/* "pytact/data_reader.pyx":1122
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def dependencies(self) -> Sequence[Path]:
 *         """A list of physical paths of data files that are direct dependencies of this file.
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ {
  PyObject_HEAD
   ::capnp::List<capnp::Text, ::capnp::Kind::BLOB>::Reader __pyx_v_dependencies;
};


/* "pytact/data_reader.pyx":1212
 *             for f, g in lreader.graphid_by_filename.items()}
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def data_reader(dataset_path: Path) -> Generator[dict[Path, Dataset], None, None]:
 *     """Load a directory of dataset files into memory, and expose the data they contain.
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader {
  PyObject_HEAD
  PyObject *__pyx_v_dataset_path;
  PyObject *__pyx_v_lreader;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
};


/* "pytact/data_reader.pyx":1304
 *         return Definition._group_by_clusters(self.definitions(full))
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_definitions_initialize(OnlineDefinitionsReader stack,
 *                                   PredictionProtocol_Request_Initialize_Reader init) -> Generator[OnlineDefinitionsReader, None, None]:
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize {
  PyObject_HEAD
  PyObject *__pyx_v_dr;
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_v_graph_index;
  struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader *__pyx_v_init;
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_stack;
};


/* "pytact/data_reader.pyx":1325
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_data_predict(OnlineDefinitionsReader base,
 *                         PredictionProtocol_Request_Predict_Reader predict) -> Generator[ProofState, None, None]:
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict {
  PyObject_HEAD
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_base;
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_v_graph_index;
  PredictionProtocol::Request::Predict::Reader __pyx_v_p;
  struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader *__pyx_v_predict;
};


/* "pytact/data_reader.pyx":1399
 *         raise Exception("Incorrect predictions received")
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel {
  PyObject_HEAD
  struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader *__pyx_v_cython_msg;
  PyObject *__pyx_v_msg;
  PyObject *__pyx_v_next_disabled_sigint;
  PyObject *__pyx_v_reader;
  PyObject *__pyx_v_record;
  PyObject *__pyx_v_response;
  PyObject *__pyx_v_socket;
};


/* "pytact/data_reader.pyx":1444
 *         msg = next_disabled_sigint()
 * 
 * def capnp_message_generator_from_file_lowlevel(message_file: BinaryIO, check = True) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel {
  PyObject_HEAD
  PyObject *__pyx_v_check;
  struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader *__pyx_v_cython_msg;
  PyObject *__pyx_v_message_file;
  PyObject *__pyx_v_message_reader;
  PyObject *__pyx_v_recorded_response;
  PyObject *__pyx_v_request;
  PyObject *__pyx_v_response;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  PyObject *(*__pyx_t_2)(PyObject *);
};


/* "pytact/data_reader.pyx":1483
 * 
 * 
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):             # <<<<<<<<<<<<<<
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator {
  PyObject_HEAD
  PyObject *__pyx_v_alignment;
  PyObject *__pyx_9genexpr11__pyx_v_d;
  PyObject *__pyx_v_definitions;
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_defs;
  PyObject *__pyx_v_init;
  PyObject *__pyx_v_lgenerator;
  PyObject *__pyx_v_msg;
  PyObject *__pyx_v_pg;
  PyObject *__pyx_v_prediction_generator_sub;
  PyObject *__pyx_v_preds;
  PyObject *__pyx_v_proof_state;
  PyObject *__pyx_v_response;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
  PyObject *__pyx_t_3;
};


/* "pytact/data_reader.pyx":1503
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:
 *                     def prediction_generator_sub():             # <<<<<<<<<<<<<<
 *                         nonlocal msg
 *                         msg = yield from prediction_generator(lgenerator, definitions)
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub {
  PyObject_HEAD
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *__pyx_outer_scope;
};


/* "pytact/data_reader.pyx":1631
 *         return context
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     def sub_context(self, propagate: Callable[[Definition], bool]) -> Generator[GlobalContextSets, None, None]:
 *         """Create a sub-context with a separate cache from it's parent, but sharing any info that was
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context {
  PyObject_HEAD
  PyObject *__pyx_v_propagate;
  PyObject *__pyx_v_self;
};


/* "pytact/data_reader.pyx":1640
 *         yield GlobalContextSets(self.cache, self, propagate)
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 */
struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context {
  PyObject_HEAD
};



/* "capnp/lib/capnp.pxd":23
 * 
 * 
 * cdef class _StructSchemaField:             # <<<<<<<<<<<<<<
 *     cdef C_StructSchema.Field thisptr
 *     cdef object _parent
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__StructSchemaField {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField *,  ::capnp::StructSchema::Field, struct __pyx_opt_args_5capnp_3lib_5capnp_18_StructSchemaField__init *__pyx_optional_args);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__StructSchemaField *__pyx_vtabptr_5capnp_3lib_5capnp__StructSchemaField;


/* "capnp/lib/capnp.pxd":28
 *     cdef _init(self, C_StructSchema.Field other, parent=?)
 * 
 * cdef class _StringArrayPtr:             # <<<<<<<<<<<<<<
 *     cdef StringPtr * thisptr
 *     cdef object parent
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__StringArrayPtr {
   ::kj::ArrayPtr< ::kj::StringPtr>  (*asArrayPtr)(struct __pyx_obj_5capnp_3lib_5capnp__StringArrayPtr *);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__StringArrayPtr *__pyx_vtabptr_5capnp_3lib_5capnp__StringArrayPtr;


/* "capnp/lib/capnp.pxd":34
 *     cdef ArrayPtr[StringPtr] asArrayPtr(self) except +reraise_kj_exception
 * 
 * cdef class SchemaParser:             # <<<<<<<<<<<<<<
 *     cdef C_SchemaParser * thisptr
 *     cdef public dict modules_by_id
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp_SchemaParser {
  PyObject *(*_parse_disk_file)(struct __pyx_obj_5capnp_3lib_5capnp_SchemaParser *, PyObject *, PyObject *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp_SchemaParser *__pyx_vtabptr_5capnp_3lib_5capnp_SchemaParser;


/* "capnp/lib/capnp.pxd":41
 *     cpdef _parse_disk_file(self, displayName, diskPath, imports) except +reraise_kj_exception
 * 
 * cdef class _DynamicOrphan:             # <<<<<<<<<<<<<<
 *     cdef C_DynamicOrphan thisptr
 *     cdef public object _parent
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicOrphan {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan *,  ::capnp::Orphan< ::capnp::DynamicValue>, PyObject *);
   ::capnp::Orphan< ::capnp::DynamicValue> (*move)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan *);
  PyObject *(*get)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicOrphan *__pyx_vtabptr_5capnp_3lib_5capnp__DynamicOrphan;


/* "capnp/lib/capnp.pxd":51
 * 
 * 
 * cdef class _DynamicStructReader:             # <<<<<<<<<<<<<<
 *     cdef C_DynamicStruct.Reader thisptr
 *     cdef public object _parent
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructReader {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *,  ::capnp::DynamicStruct::Reader, PyObject *, struct __pyx_opt_args_5capnp_3lib_5capnp_20_DynamicStructReader__init *__pyx_optional_args);
  PyObject *(*_get)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_has)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *, PyObject *, int __pyx_skip_dispatch);
  struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField *(*_which)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *, int __pyx_skip_dispatch);
  PyObject *(*_which_str)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *, int __pyx_skip_dispatch);
  PyObject *(*_get_by_field)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *, struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField *, int __pyx_skip_dispatch);
  PyObject *(*_has_by_field)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *, struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField *, int __pyx_skip_dispatch);
  PyObject *(*as_builder)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader *, int __pyx_skip_dispatch, struct __pyx_opt_args_5capnp_3lib_5capnp_20_DynamicStructReader_as_builder *__pyx_optional_args);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructReader *__pyx_vtabptr_5capnp_3lib_5capnp__DynamicStructReader;


/* "capnp/lib/capnp.pxd":70
 * 
 * 
 * cdef class _DynamicStructBuilder:             # <<<<<<<<<<<<<<
 *     cdef DynamicStruct_Builder thisptr
 *     cdef public object _parent
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructBuilder {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *,  ::capnp::DynamicStruct::Builder, PyObject *, struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder__init *__pyx_optional_args);
  PyObject *(*_check_write)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *);
  PyObject *(*to_bytes)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, int __pyx_skip_dispatch);
  PyObject *(*to_segments)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, int __pyx_skip_dispatch);
  PyObject *(*_to_bytes_packed_helper)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*to_bytes_packed)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, int __pyx_skip_dispatch);
  PyObject *(*_get)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_set)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_has)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder_init *__pyx_optional_args);
  PyObject *(*_get_by_field)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField *, int __pyx_skip_dispatch);
  PyObject *(*_set_by_field)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*_has_by_field)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField *, int __pyx_skip_dispatch);
  PyObject *(*_init_by_field)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField *, int __pyx_skip_dispatch, struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder__init_by_field *__pyx_optional_args);
  PyObject *(*init_resizable_list)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, int __pyx_skip_dispatch);
  struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField *(*_which)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, int __pyx_skip_dispatch);
  PyObject *(*_which_str)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, int __pyx_skip_dispatch);
  PyObject *(*adopt)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan *, int __pyx_skip_dispatch);
  PyObject *(*disown)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*as_reader)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, int __pyx_skip_dispatch);
  PyObject *(*copy)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder *, int __pyx_skip_dispatch, struct __pyx_opt_args_5capnp_3lib_5capnp_21_DynamicStructBuilder_copy *__pyx_optional_args);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructBuilder *__pyx_vtabptr_5capnp_3lib_5capnp__DynamicStructBuilder;


/* "capnp/lib/capnp.pxd":102
 *     cpdef copy(self, num_first_segment_words=?)
 * 
 * cdef class _DynamicEnumField:             # <<<<<<<<<<<<<<
 *     cdef object thisptr
 * 
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnumField {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField *, PyObject *);
  PyObject *(*_str)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnumField *__pyx_vtabptr_5capnp_3lib_5capnp__DynamicEnumField;


/* "capnp/lib/capnp.pxd":108
 *     cpdef _str(self)
 * 
 * cdef class _Schema:             # <<<<<<<<<<<<<<
 *     cdef C_Schema thisptr
 * 
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__Schema {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__Schema *,  ::capnp::Schema);
  PyObject *(*as_const_value)(struct __pyx_obj_5capnp_3lib_5capnp__Schema *, int __pyx_skip_dispatch);
  PyObject *(*as_struct)(struct __pyx_obj_5capnp_3lib_5capnp__Schema *, int __pyx_skip_dispatch);
  PyObject *(*as_interface)(struct __pyx_obj_5capnp_3lib_5capnp__Schema *, int __pyx_skip_dispatch);
  PyObject *(*as_enum)(struct __pyx_obj_5capnp_3lib_5capnp__Schema *, int __pyx_skip_dispatch);
  PyObject *(*get_proto)(struct __pyx_obj_5capnp_3lib_5capnp__Schema *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__Schema *__pyx_vtabptr_5capnp_3lib_5capnp__Schema;


/* "capnp/lib/capnp.pxd":119
 *     cpdef get_proto(self)
 * 
 * cdef class _InterfaceSchema:             # <<<<<<<<<<<<<<
 *     cdef C_InterfaceSchema thisptr
 *     cdef object __method_names, __method_names_inherited, __methods, __methods_inherited
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__InterfaceSchema {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__InterfaceSchema *,  ::capnp::InterfaceSchema);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__InterfaceSchema *__pyx_vtabptr_5capnp_3lib_5capnp__InterfaceSchema;


/* "capnp/lib/capnp.pxd":124
 *     cdef _init(self, C_InterfaceSchema other)
 * 
 * cdef class _DynamicEnum:             # <<<<<<<<<<<<<<
 *     cdef capnp.DynamicEnum thisptr
 *     cdef public object _parent
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnum {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnum *,  ::capnp::DynamicEnum, PyObject *);
  PyObject *(*_as_str)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnum *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnum *__pyx_vtabptr_5capnp_3lib_5capnp__DynamicEnum;


/* "capnp/lib/capnp.pxd":131
 *     cpdef _as_str(self) except +reraise_kj_exception
 * 
 * cdef class _DynamicListBuilder:             # <<<<<<<<<<<<<<
 *     cdef C_DynamicList.Builder thisptr
 *     cdef public object _parent
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicListBuilder {
  PyObject *(*_init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder *,  ::capnp::DynamicList::Builder, PyObject *);
  PyObject *(*_get)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder *, int64_t, int __pyx_skip_dispatch);
  PyObject *(*_set)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder *, PyObject *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*adopt)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder *, PyObject *, struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan *, int __pyx_skip_dispatch);
  PyObject *(*disown)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*init)(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder *, PyObject *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicListBuilder *__pyx_vtabptr_5capnp_3lib_5capnp__DynamicListBuilder;


/* "capnp/lib/capnp.pxd":144
 *     cpdef init(self, index, size)
 * 
 * cdef class _MessageBuilder:             # <<<<<<<<<<<<<<
 *     cdef schema_cpp.MessageBuilder * thisptr
 *     cpdef init_root(self, schema)
 */

struct __pyx_vtabstruct_5capnp_3lib_5capnp__MessageBuilder {
  PyObject *(*init_root)(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*get_root)(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*get_root_as_any)(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder *, int __pyx_skip_dispatch);
  PyObject *(*set_root)(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*get_segments_for_output)(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder *, int __pyx_skip_dispatch);
  PyObject *(*new_orphan)(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder *, PyObject *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5capnp_3lib_5capnp__MessageBuilder *__pyx_vtabptr_5capnp_3lib_5capnp__MessageBuilder;


/* "pytact/graph_api_capnp_cython.pxd":561
 *         uint size()
 * 
 * cdef class Graph_Node_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Node_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader {
  PyObject *(*init)(Graph::Node::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Reader;


/* "pytact/graph_api_capnp_cython.pxd":567
 *     cdef init(C_Graph_Node_Reader source, object root)
 * 
 * cdef class Graph_EdgeTarget_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_EdgeTarget_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader {
  PyObject *(*init)(Graph::EdgeTarget::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader;


/* "pytact/graph_api_capnp_cython.pxd":573
 *     cdef init(C_Graph_EdgeTarget_Reader source, object root)
 * 
 * cdef class Graph_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Reader {
  PyObject *(*init)(Graph::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Reader;


/* "pytact/graph_api_capnp_cython.pxd":579
 *     cdef init(C_Graph_Reader source, object root)
 * 
 * cdef class IntP_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_IntP_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_IntP_Reader {
  PyObject *(*init)(IntP::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_IntP_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_IntP_Reader;


/* "pytact/graph_api_capnp_cython.pxd":585
 *     cdef init(C_IntP_Reader source, object root)
 * 
 * cdef class Definition_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Definition_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Reader {
  PyObject *(*init)(Definition::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Reader;


/* "pytact/graph_api_capnp_cython.pxd":591
 *     cdef init(C_Definition_Reader source, object root)
 * 
 * cdef class FloatP_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_FloatP_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_FloatP_Reader {
  PyObject *(*init)(FloatP::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_FloatP_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_FloatP_Reader;


/* "pytact/graph_api_capnp_cython.pxd":597
 *     cdef init(C_FloatP_Reader source, object root)
 * 
 * cdef class Graph_Node_Label_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Node_Label_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader {
  PyObject *(*init)(Graph::Node::Label::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader;


/* "pytact/graph_api_capnp_cython.pxd":603
 *     cdef init(C_Graph_Node_Label_Reader source, object root)
 * 
 * cdef class Definition_Status_Substituted_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Definition_Status_Substituted_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader {
  PyObject *(*init)(Definition::Status::Substituted::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader;


/* "pytact/graph_api_capnp_cython.pxd":609
 *     cdef init(C_Definition_Status_Substituted_Reader source, object root)
 * 
 * cdef class Definition_Status_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Definition_Status_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Reader {
  PyObject *(*init)(Definition::Status::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Status_Reader;


/* "pytact/graph_api_capnp_cython.pxd":615
 *     cdef init(C_Definition_Status_Reader source, object root)
 * 
 * cdef class ProofStep_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofStep_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader {
  PyObject *(*init)(ProofStep::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Reader;


/* "pytact/graph_api_capnp_cython.pxd":621
 *     cdef init(C_ProofStep_Reader source, object root)
 * 
 * cdef class Tactic_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Tactic_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Tactic_Reader {
  PyObject *(*init)(Tactic::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Tactic_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Tactic_Reader;


/* "pytact/graph_api_capnp_cython.pxd":627
 *     cdef init(C_Tactic_Reader source, object root)
 * 
 * cdef class ProofStep_Tactic_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofStep_Tactic_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader {
  PyObject *(*init)(ProofStep::Tactic::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader;


/* "pytact/graph_api_capnp_cython.pxd":633
 *     cdef init(C_ProofStep_Tactic_Reader source, object root)
 * 
 * cdef class Outcome_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Outcome_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader {
  PyObject *(*init)(Outcome::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Reader;


/* "pytact/graph_api_capnp_cython.pxd":639
 *     cdef init(C_Outcome_Reader source, object root)
 * 
 * cdef class Outcome_Term_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Outcome_Term_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader {
  PyObject *(*init)(Outcome::Term::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader;


/* "pytact/graph_api_capnp_cython.pxd":645
 *     cdef init(C_Outcome_Term_Reader source, object root)
 * 
 * cdef class ProofState_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofState_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader {
  PyObject *(*init)(ProofState::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Reader;


/* "pytact/graph_api_capnp_cython.pxd":651
 *     cdef init(C_ProofState_Reader source, object root)
 * 
 * cdef class Argument_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Argument_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader {
  PyObject *(*init)(Argument::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Reader;


/* "pytact/graph_api_capnp_cython.pxd":657
 *     cdef init(C_Argument_Reader source, object root)
 * 
 * cdef class ProofState_Root_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ProofState_Root_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader {
  PyObject *(*init)(ProofState::Root::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader;


/* "pytact/graph_api_capnp_cython.pxd":663
 *     cdef init(C_ProofState_Root_Reader source, object root)
 * 
 * cdef class Node_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Node_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader {
  PyObject *(*init)(Node::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Node_Reader;


/* "pytact/graph_api_capnp_cython.pxd":669
 *     cdef init(C_Node_Reader source, object root)
 * 
 * cdef class Argument_Term_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Argument_Term_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Term_Reader {
  PyObject *(*init)(Argument::Term::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Term_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Term_Reader;


/* "pytact/graph_api_capnp_cython.pxd":675
 *     cdef init(C_Argument_Term_Reader source, object root)
 * 
 * cdef class Graph_EdgeTarget_Target_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_EdgeTarget_Target_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader {
  PyObject *(*init)(Graph::EdgeTarget::Target::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader;


/* "pytact/graph_api_capnp_cython.pxd":681
 *     cdef init(C_Graph_EdgeTarget_Target_Reader source, object root)
 * 
 * cdef class AbstractTactic_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_AbstractTactic_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader {
  PyObject *(*init)(AbstractTactic::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader;


/* "pytact/graph_api_capnp_cython.pxd":687
 *     cdef init(C_AbstractTactic_Reader source, object root)
 * 
 * cdef class DataVersion_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_DataVersion_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_DataVersion_Reader {
  PyObject *(*init)(DataVersion::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_DataVersion_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_DataVersion_Reader;


/* "pytact/graph_api_capnp_cython.pxd":693
 *     cdef init(C_DataVersion_Reader source, object root)
 * 
 * cdef class Dataset_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Dataset_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Dataset_Reader {
  PyObject *(*init)(Dataset::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Dataset_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Dataset_Reader;


/* "pytact/graph_api_capnp_cython.pxd":699
 *     cdef init(C_Dataset_Reader source, object root)
 * 
 * cdef class Exception_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_Exception_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Exception_Reader {
  PyObject *(*init)(Exception::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Exception_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Exception_Reader;


/* "pytact/graph_api_capnp_cython.pxd":705
 *     cdef init(C_Exception_Reader source, object root)
 * 
 * cdef class ExecutionResult_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ExecutionResult_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader {
  PyObject *(*init)(ExecutionResult::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader;


/* "pytact/graph_api_capnp_cython.pxd":711
 *     cdef init(C_ExecutionResult_Reader source, object root)
 * 
 * cdef class ExecutionResult_NewState_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ExecutionResult_NewState_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader {
  PyObject *(*init)(ExecutionResult::NewState::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader;


/* "pytact/graph_api_capnp_cython.pxd":717
 *     cdef init(C_ExecutionResult_NewState_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader {
  PyObject *(*init)(PredictionProtocol::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader;


/* "pytact/graph_api_capnp_cython.pxd":723
 *     cdef init(C_PredictionProtocol_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Request_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Request_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader {
  PyObject *(*init)(PredictionProtocol::Request::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader;


/* "pytact/graph_api_capnp_cython.pxd":729
 *     cdef init(C_PredictionProtocol_Request_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Request_Initialize_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Request_Initialize_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader {
  PyObject *(*init)(PredictionProtocol::Request::Initialize::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader;


/* "pytact/graph_api_capnp_cython.pxd":735
 *     cdef init(C_PredictionProtocol_Request_Initialize_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Request_Predict_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Request_Predict_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader {
  PyObject *(*init)(PredictionProtocol::Request::Predict::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader;


/* "pytact/graph_api_capnp_cython.pxd":741
 *     cdef init(C_PredictionProtocol_Request_Predict_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Prediction_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Prediction_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader {
  PyObject *(*init)(PredictionProtocol::Prediction::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader;


/* "pytact/graph_api_capnp_cython.pxd":747
 *     cdef init(C_PredictionProtocol_Prediction_Reader source, object root)
 * 
 * cdef class PredictionProtocol_TextPrediction_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_TextPrediction_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader {
  PyObject *(*init)(PredictionProtocol::TextPrediction::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader;


/* "pytact/graph_api_capnp_cython.pxd":753
 *     cdef init(C_PredictionProtocol_TextPrediction_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Response_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Response_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader {
  PyObject *(*init)(PredictionProtocol::Response::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader;


/* "pytact/graph_api_capnp_cython.pxd":759
 *     cdef init(C_PredictionProtocol_Response_Reader source, object root)
 * 
 * cdef class PredictionProtocol_Response_Alignment_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Response_Alignment_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader {
  PyObject *(*init)(PredictionProtocol::Response::Alignment::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader;


/* "pytact/graph_api_capnp_cython.pxd":765
 *     cdef init(C_PredictionProtocol_Response_Alignment_Reader source, object root)
 * 
 * cdef class ConflatableEdges_Reader:             # <<<<<<<<<<<<<<
 *     cdef C_ConflatableEdges_Reader source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader {
  PyObject *(*init)(ConflatableEdges::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader;


/* "pytact/graph_api_capnp_cython.pxd":771
 *     cdef init(C_ConflatableEdges_Reader source, object root)
 * 
 * cdef class Uint16_List:             # <<<<<<<<<<<<<<
 *     cdef C_Uint16_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint16_List {
  PyObject *(*init)( ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint16_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint16_List;


/* "pytact/graph_api_capnp_cython.pxd":777
 *     cdef init(C_Uint16_List source, object root)
 * 
 * cdef class Uint32_List:             # <<<<<<<<<<<<<<
 *     cdef C_Uint32_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint32_List {
  PyObject *(*init)( ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint32_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint32_List;


/* "pytact/graph_api_capnp_cython.pxd":783
 *     cdef init(C_Uint32_List source, object root)
 * 
 * cdef class Uint64_List:             # <<<<<<<<<<<<<<
 *     cdef C_Uint64_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint64_List {
  PyObject *(*init)( ::capnp::List<uint64_t, ::capnp::Kind::PRIMITIVE>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint64_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint64_List;


/* "pytact/graph_api_capnp_cython.pxd":789
 *     cdef init(C_Uint64_List source, object root)
 * 
 * cdef class Int64_List:             # <<<<<<<<<<<<<<
 *     cdef C_Int64_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Int64_List {
  PyObject *(*init)( ::capnp::List<int64_t, ::capnp::Kind::PRIMITIVE>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Int64_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Int64_List;


/* "pytact/graph_api_capnp_cython.pxd":795
 *     cdef init(C_Int64_List source, object root)
 * 
 * cdef class String_List:             # <<<<<<<<<<<<<<
 *     cdef C_String_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_String_List {
  PyObject *(*init)( ::capnp::List<capnp::Text, ::capnp::Kind::BLOB>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_String_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_String_List;


/* "pytact/graph_api_capnp_cython.pxd":800
 *     @staticmethod
 *     cdef init(C_String_List source, object root)
 * cdef class PredictionProtocol_Prediction_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_Prediction_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List {
  PyObject *(*init)( ::capnp::List<PredictionProtocol::Prediction, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":805
 *     @staticmethod
 *     cdef init(C_PredictionProtocol_Prediction_Reader_List source, object root)
 * cdef class Graph_Node_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_Node_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List {
  PyObject *(*init)( ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":810
 *     @staticmethod
 *     cdef init(C_Graph_Node_Reader_List source, object root)
 * cdef class AbstractTactic_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_AbstractTactic_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List {
  PyObject *(*init)( ::capnp::List<AbstractTactic, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":815
 *     @staticmethod
 *     cdef init(C_AbstractTactic_Reader_List source, object root)
 * cdef class ProofStep_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_ProofStep_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List {
  PyObject *(*init)( ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":820
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader_List source, object root)
 * cdef class PredictionProtocol_TextPrediction_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_PredictionProtocol_TextPrediction_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List {
  PyObject *(*init)( ::capnp::List<PredictionProtocol::TextPrediction, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":825
 *     @staticmethod
 *     cdef init(C_PredictionProtocol_TextPrediction_Reader_List source, object root)
 * cdef class ProofState_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_ProofState_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader_List {
  PyObject *(*init)( ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":830
 *     @staticmethod
 *     cdef init(C_ProofState_Reader_List source, object root)
 * cdef class Graph_EdgeTarget_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Graph_EdgeTarget_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List {
  PyObject *(*init)( ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":835
 *     @staticmethod
 *     cdef init(C_Graph_EdgeTarget_Reader_List source, object root)
 * cdef class Argument_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Argument_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader_List {
  PyObject *(*init)( ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":840
 *     @staticmethod
 *     cdef init(C_Argument_Reader_List source, object root)
 * cdef class Outcome_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Outcome_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader_List {
  PyObject *(*init)( ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Reader_List;


/* "pytact/graph_api_capnp_cython.pxd":845
 *     @staticmethod
 *     cdef init(C_Outcome_Reader_List source, object root)
 * cdef class Node_Reader_List:             # <<<<<<<<<<<<<<
 *     cdef C_Node_Reader_List source
 *     cdef object root
 */

struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader_List {
  PyObject *(*init)( ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader, PyObject *);
};
static struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader_List *__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Node_Reader_List;


/* "pytact/data_reader.pyx":293
 * NodeHash = int
 * 
 * cdef class Node:             # <<<<<<<<<<<<<<
 *     """A node in the calculus of inductive construction graph.
 * 
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Node {
  PyObject *(*init)(__pyx_t_6pytact_11data_reader_GraphId, int, struct __pyx_t_6pytact_11data_reader_GraphIndex *);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Node *__pyx_vtabptr_6pytact_11data_reader_Node;


/* "pytact/data_reader.pyx":391
 *             return None
 * 
 * cdef class EdgeTarget_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Graph_EdgeTarget_Reader_List edges
 */

struct __pyx_vtabstruct_6pytact_11data_reader_EdgeTarget_List {
  PyObject *(*init)( ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId, uint32_t, uint16_t);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_EdgeTarget_List *__pyx_vtabptr_6pytact_11data_reader_EdgeTarget_List;


/* "pytact/data_reader.pyx":422
 *         return self.count
 * 
 * cdef class Node_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Node_Reader_List reader
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Node_List {
  PyObject *(*init)( ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Node_List *__pyx_vtabptr_6pytact_11data_reader_Node_List;


/* "pytact/data_reader.pyx":447
 *         return self.reader.size()
 * 
 * cdef class ProofState:             # <<<<<<<<<<<<<<
 *     """A proof state represents a particular point in the tactical proof of a constant."""
 * 
 */

struct __pyx_vtabstruct_6pytact_11data_reader_ProofState {
  PyObject *(*init)(ProofState::Reader, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofState *__pyx_vtabptr_6pytact_11data_reader_ProofState;


/* "pytact/data_reader.pyx":534
 *         return self.reader.getId()
 * 
 * cdef class ProofState_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_ProofState_Reader_List reader
 */

struct __pyx_vtabstruct_6pytact_11data_reader_ProofState_List {
  PyObject *(*init)( ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofState_List *__pyx_vtabptr_6pytact_11data_reader_ProofState_List;


/* "pytact/data_reader.pyx":556
 *         return self.reader.size()
 * 
 * cdef class Argument_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Argument_Reader_List reader
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Argument_List {
  PyObject *(*init)( ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Argument_List *__pyx_vtabptr_6pytact_11data_reader_Argument_List;


/* "pytact/data_reader.pyx":588
 * Unresolvable: TypeAlias = None
 * Unknown: TypeAlias = None
 * cdef class Outcome:             # <<<<<<<<<<<<<<
 *     """An outcome is the result of running a tactic on a proof state. A tactic may run on multiple proof states."""
 * 
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Outcome {
  PyObject *(*init)(Outcome::Reader, PyObject *, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Outcome *__pyx_vtabptr_6pytact_11data_reader_Outcome;


/* "pytact/data_reader.pyx":655
 *         return Argument_List.init(args, graph_index, graph)
 * 
 * cdef class Outcome_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Outcome_Reader_List reader
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Outcome_List {
  PyObject *(*init)( ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader, PyObject *, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Outcome_List *__pyx_vtabptr_6pytact_11data_reader_Outcome_List;


/* "pytact/data_reader.pyx":679
 *         return self.reader.size()
 * 
 * cdef class ProofStep:             # <<<<<<<<<<<<<<
 *     """A proof step is the execution of a single tactic on one or more proof states, producing a list of outcomes.
 *     """
 */

struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep {
  PyObject *(*init)(ProofStep::Reader, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep *__pyx_vtabptr_6pytact_11data_reader_ProofStep;


/* "pytact/data_reader.pyx":724
 *         return Outcome_List.init(self.reader.getOutcomes(), self.tactic, self.graph_index, self.graph)
 * 
 * cdef class ProofStep_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_ProofStep_Reader_List reader
 */

struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep_List {
  PyObject *(*init)( ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep_List *__pyx_vtabptr_6pytact_11data_reader_ProofStep_List;


/* "pytact/data_reader.pyx":746
 *         return self.reader.size()
 * 
 * cdef class Representative_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Uint16_List reader
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Representative_List {
  PyObject *(*init)( ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Representative_List *__pyx_vtabptr_6pytact_11data_reader_Representative_List;


/* "pytact/data_reader.pyx":801
 *     proof: Sequence[ProofStep]
 * 
 * cdef class Definition:             # <<<<<<<<<<<<<<
 *     """A definition of the CIC, which is either a constant, inductive, constructor, projection or section
 *     variable. Constants and section variables can have tactical proofs associated to them.
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Definition {
  PyObject *(*init)(struct __pyx_obj_6pytact_11data_reader_Node *, Definition::Reader, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Definition *__pyx_vtabptr_6pytact_11data_reader_Definition;


/* "pytact/data_reader.pyx":1074
 *             yield cluster
 * 
 * cdef class Dataset_Definition_List:             # <<<<<<<<<<<<<<
 *     cdef GraphIndex *graph_index
 *     cdef C_Uint32_List reader
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Dataset_Definition_List {
  PyObject *(*init)( ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Dataset_Definition_List *__pyx_vtabptr_6pytact_11data_reader_Dataset_Definition_List;


/* "pytact/data_reader.pyx":1096
 *         return self.reader.size()
 * 
 * cdef class Dataset:             # <<<<<<<<<<<<<<
 *     """The data corresponding to a single Coq source file. The data contains a representation of all definitions
 *     that have existed at any point throughout the compilation of the source file.
 */

struct __pyx_vtabstruct_6pytact_11data_reader_Dataset {
  PyObject *(*init)(PyObject *, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_Dataset *__pyx_vtabptr_6pytact_11data_reader_Dataset;


/* "pytact/data_reader.pyx":1226
 *         yield lowlevel_to_highlevel(lreader)
 * 
 * cdef class OnlineDefinitionsReader:             # <<<<<<<<<<<<<<
 * 
 *     cdef GraphIndex graph_index
 */

struct __pyx_vtabstruct_6pytact_11data_reader_OnlineDefinitionsReader {
  PyObject *(*init)(struct __pyx_t_6pytact_11data_reader_GraphIndex, PredictionProtocol::Request::Initialize::Reader);
  PyObject *(*init_empty)(void);
};
static struct __pyx_vtabstruct_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_vtabptr_6pytact_11data_reader_OnlineDefinitionsReader;
/* #### Code section: utility_code_proto ### */

/* --- Runtime support code (head) --- */
/* Refnanny.proto */
#ifndef CYTHON_REFNANNY
  #define CYTHON_REFNANNY 0
#endif
#if CYTHON_REFNANNY
  typedef struct {
    void (*INCREF)(void*, PyObject*, Py_ssize_t);
    void (*DECREF)(void*, PyObject*, Py_ssize_t);
    void (*GOTREF)(void*, PyObject*, Py_ssize_t);
    void (*GIVEREF)(void*, PyObject*, Py_ssize_t);
    void* (*SetupContext)(const char*, Py_ssize_t, 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__));\
          }
  #define __Pyx_RefNannyFinishContextNogil() {\
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
              __Pyx_RefNannyFinishContext();\
              PyGILState_Release(__pyx_gilstate_save);\
          }
#else
  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__))
  #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext()
#endif
  #define __Pyx_RefNannyFinishContextNogil() {\
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
              __Pyx_RefNannyFinishContext();\
              PyGILState_Release(__pyx_gilstate_save);\
          }
  #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); else {__Pyx_INCREF(r); }} while(0)
  #define __Pyx_XDECREF(r)  do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0)
  #define __Pyx_XGOTREF(r)  do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0)
  #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0)
#else
  #define __Pyx_RefNannyDeclarations
  #define __Pyx_RefNannySetupContext(name, acquire_gil)
  #define __Pyx_RefNannyFinishContextNogil()
  #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_Py_XDECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; Py_XDECREF(tmp);\
    } while (0)
#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)

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

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

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

/* PyObjectGetAttrStrNoError.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);

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

/* TupleAndListFromArray.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
#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);

/* fastcall.proto */
#define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i)
#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
#define __Pyx_KwValues_VARARGS(args, nargs) NULL
#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
#if CYTHON_METH_FASTCALL
    #define __Pyx_Arg_FASTCALL(args, i) args[i]
    #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds)
    #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
    static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
    #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
#else
    #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS
    #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
    #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
    #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
    #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
#endif
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start)
#else
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
#endif

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

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

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

/* ArgTypeTest.proto */
#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
    ((likely(__Pyx_IS_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);

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

/* PyFunctionFastCall.proto */
#if CYTHON_FAST_PYCALL
#if !CYTHON_VECTORCALL
#define __Pyx_PyFunction_FastCall(func, args, nargs)\
    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *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
#if !CYTHON_VECTORCALL
#if PY_VERSION_HEX >= 0x03080000
  #include "frameobject.h"
#if PY_VERSION_HEX >= 0x030b00a6
  #ifndef Py_BUILD_CORE
    #define Py_BUILD_CORE 1
  #endif
  #include "internal/pycore_frame.h"
#endif
  #define __Pxy_PyFrame_Initialize_Offsets()
  #define __Pyx_PyFrame_GetLocalsplus(frame)  ((frame)->f_localsplus)
#else
  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
#endif
#endif

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

/* PyObjectFastCall.proto */
#define __Pyx_PyObject_FastCall(func, args, nargs)  __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs);

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

/* PyObjectCallNoArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);

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

/* RaiseUnexpectedTypeError.proto */
static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj);

/* PyObjectLookupSpecial.proto */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 0)
#define __Pyx_PyObject_LookupSpecial(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 1)
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error);
#else
#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n)
#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
#endif

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

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

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

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

/* IncludeStructmemberH.proto */
#include <structmember.h>

/* FixUpExtensionType.proto */
#if CYTHON_USE_TYPE_SPECS
static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);
#endif

/* FetchSharedCythonModule.proto */
static PyObject *__Pyx_FetchSharedCythonABIModule(void);

/* FetchCommonType.proto */
#if !CYTHON_USE_TYPE_SPECS
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
#else
static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases);
#endif

/* PyMethodNew.proto */
#if PY_MAJOR_VERSION >= 3
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
    CYTHON_UNUSED_VAR(typ);
    if (!self)
        return __Pyx_NewRef(func);
    return PyMethod_New(func, self);
}
#else
    #define __Pyx_PyMethod_New PyMethod_New
#endif

/* PyVectorcallFastCallDict.proto */
#if CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
#endif

/* CythonFunctionShared.proto */
#define __Pyx_CyFunction_USED
#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
#define __Pyx_CYFUNCTION_CCLASS        0x04
#define __Pyx_CYFUNCTION_COROUTINE     0x08
#define __Pyx_CyFunction_GetClosure(f)\
    (((__pyx_CyFunctionObject *) (f))->func_closure)
#if PY_VERSION_HEX < 0x030900B1
  #define __Pyx_CyFunction_GetClassObj(f)\
      (((__pyx_CyFunctionObject *) (f))->func_classobj)
#else
  #define __Pyx_CyFunction_GetClassObj(f)\
      ((PyObject*) ((PyCMethodObject *) (f))->mm_class)
#endif
#define __Pyx_CyFunction_SetClassObj(f, classobj)\
    __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (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 {
#if PY_VERSION_HEX < 0x030900B1
    PyCFunctionObject func;
#else
    PyCMethodObject func;
#endif
#if CYTHON_BACKPORT_VECTORCALL
    __pyx_vectorcallfunc func_vectorcall;
#endif
#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;
#if PY_VERSION_HEX < 0x030900B1
    PyObject *func_classobj;
#endif
    void *defaults;
    int defaults_pyobjects;
    size_t defaults_size;  // used by FusedFunction for copying defaults
    int flags;
    PyObject *defaults_tuple;
    PyObject *defaults_kwdict;
    PyObject *(*defaults_getter)(PyObject *);
    PyObject *func_annotations;
    PyObject *func_is_coroutine;
} __pyx_CyFunctionObject;
#if !CYTHON_USE_MODULE_STATE
static PyTypeObject *__pyx_CyFunctionType = 0;
#endif
#define __Pyx_CyFunction_Check(obj)  __Pyx_TypeCheck(obj, __pyx_CyFunctionType)
#define __Pyx_IsCyOrPyCFunction(obj)  __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type)
#define __Pyx_CyFunction_CheckExact(obj)  __Pyx_IS_TYPE(obj, __pyx_CyFunctionType)
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *closure,
                                      PyObject *module, PyObject *globals,
                                      PyObject* code);
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
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(PyObject *module);
#if CYTHON_METH_FASTCALL
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
#if CYTHON_BACKPORT_VECTORCALL
#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
#else
#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
#endif
#endif

/* CythonFunction.proto */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *closure,
                                      PyObject *module, PyObject *globals,
                                      PyObject* code);

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

/* PyObjectFormatSimple.proto */
#if CYTHON_COMPILING_IN_PYPY
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        PyObject_Format(s, f))
#elif PY_MAJOR_VERSION < 3
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\
        PyObject_Format(s, f))
#elif CYTHON_USE_TYPE_SLOTS
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\
        likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\
        PyObject_Format(s, f))
#else
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        PyObject_Format(s, f))
#endif

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

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

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

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

/* JoinPyUnicode.proto */
static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength,
                                      Py_UCS4 max_char);

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

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

/* 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);
        __Pyx_SET_SIZE(list, len + 1);
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
#endif

/* PyIntBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
    (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
#endif

/* MoveIfSupported.proto */
#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)
  #include <utility>
  #define __PYX_STD_MOVE_IF_SUPPORTED(x) std::move(x)
#else
  #define __PYX_STD_MOVE_IF_SUPPORTED(x) x
#endif

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

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

/* PyObject_Str.proto */
#define __Pyx_PyObject_Str(obj)\
    (likely(PyString_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj))

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

/* UnicodeConcatInPlace.proto */
# if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
    #if CYTHON_REFNANNY
        #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, __pyx_refnanny)
    #else
        #define __Pyx_PyUnicode_ConcatInPlace(left, right) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right)
    #endif
    static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right
        #if CYTHON_REFNANNY
        , void* __pyx_refnanny
        #endif
    );
#else
#define __Pyx_PyUnicode_ConcatInPlace __Pyx_PyUnicode_Concat
#endif
#define __Pyx_PyUnicode_ConcatInPlaceSafe(left, right) ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\
    PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_ConcatInPlace(left, right))

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

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

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

/* 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 */
struct __pyx_CoroutineObject;
typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, 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 __pyx_CoroutineObject {
    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;
    PyObject *gi_frame;
    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);

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

/* 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) __Pyx_IS_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(PyObject *module);

/* GeneratorYieldFrom.proto */
static CYTHON_INLINE PyObject* __Pyx_Generator_Yield_From(__pyx_CoroutineObject *gen, PyObject *source);

/* IterNext.proto */
#define __Pyx_PyIter_Next(obj) __Pyx_PyIter_Next2(obj, NULL)
static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject *, PyObject *);

/* 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);
        __Pyx_SET_SIZE(list, len + 1);
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif

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

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

/* PyIntBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyInt_SubtractObjC(op1, op2, intval, inplace, zerodivision_check)\
    (inplace ? PyNumber_InPlaceSubtract(op1, op2) : PyNumber_Subtract(op1, op2))
#endif

/* RaiseClosureNameError.proto */
static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname);

/* ReturnWithStopIteration.proto */
#define __Pyx_ReturnWithStopIteration(value)\
    if (value == Py_None) PyErr_SetNone(PyExc_StopIteration); else __Pyx__ReturnWithStopIteration(value)
static void __Pyx__ReturnWithStopIteration(PyObject* value);

/* RaiseUnboundLocalError.proto */
static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);

/* SliceTupleAndList.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
#else
#define __Pyx_PyList_GetSlice(seq, start, stop)   PySequence_GetSlice(seq, start, stop)
#define __Pyx_PyTuple_GetSlice(seq, start, stop)  PySequence_GetSlice(seq, start, stop)
#endif

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

/* ValidateBasesTuple.proto */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
#endif

/* PyType_Ready.proto */
static CYTHON_UNUSED int __Pyx_PyType_Ready(PyTypeObject *t);

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

/* SetupReduce.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_setup_reduce(PyObject* type_obj);
#endif

/* SetVTable.proto */
static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable);

/* GetVTable.proto */
static void* __Pyx_GetVtable(PyTypeObject *type);

/* MergeVTables.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_MergeVtables(PyTypeObject *type);
#endif

/* TypeImport.proto */
#ifndef __PYX_HAVE_RT_ImportType_proto
#define __PYX_HAVE_RT_ImportType_proto
#if __STDC_VERSION__ >= 201112L
#include <stdalign.h>
#endif
#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
#define __PYX_GET_STRUCT_ALIGNMENT(s) alignof(s)
#else
#define __PYX_GET_STRUCT_ALIGNMENT(s) sizeof(void*)
#endif
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, size_t alignment, enum __Pyx_ImportType_CheckSize check_size);
#endif

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

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

/* ImportDottedModule.proto */
static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple);

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

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

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

/* CyFunctionClassCell.proto */
static int __Pyx_CyFunction_InitClassCell(PyObject *cyfunctions, PyObject *classobj);

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

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

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

/* CodeObjectCache.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
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);
#endif

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

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

/* GCCDiagnostics.proto */
#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#define __Pyx_HAS_GCC_DIAGNOSTIC
#endif

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

/* EnumClassDecl.proto */
#if defined (_MSC_VER)
  #if _MSC_VER >= 1910
    #define __PYX_ENUM_CLASS_DECL enum
  #else
    #define __PYX_ENUM_CLASS_DECL
  #endif
#else
  #define __PYX_ENUM_CLASS_DECL enum
#endif

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

/* CIntFromPy.proto */
static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *);

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

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

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

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

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value);

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

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

/* FormatTypeName.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%U"
static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp);
#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
#else
typedef const char *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%.200s"
#define __Pyx_PyType_GetName(tp) ((tp)->tp_name)
#define __Pyx_DECREF_TypeName(obj)
#endif

/* FastTypeChecks.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, 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_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
#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_PyErr_ExceptionMatches2(err1, err2)  __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_Occurred(), err1, err2)
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)

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

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

/* InitStrings.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str);
#else
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
#endif

/* #### Code section: module_declarations ### */
static PyObject *__pyx_f_6pytact_11data_reader_4Node_init(__pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, int __pyx_v_nodeid, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_15EdgeTarget_List_init( ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader __pyx_v_edges, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, uint32_t __pyx_v_start, uint16_t __pyx_v_count); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_9Node_List_init( ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_10ProofState_init(ProofState::Reader __pyx_v_reader, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_15ProofState_List_init( ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_13Argument_List_init( ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_7Outcome_init(Outcome::Reader __pyx_v_reader, PyObject *__pyx_v_tactic, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_12Outcome_List_init( ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, PyObject *__pyx_v_tactic, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_9ProofStep_init(ProofStep::Reader __pyx_v_reader, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_14ProofStep_List_init( ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_19Representative_List_init( ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_10Definition_init(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_node, Definition::Reader __pyx_v_reader, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_23Dataset_Definition_List_init( ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_7Dataset_init(PyObject *__pyx_v_filename, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_lreader); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init(struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_v_graph_index, PredictionProtocol::Request::Initialize::Reader __pyx_v_init); /* proto*/
static PyObject *__pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init_empty(void); /* proto*/

/* Module declarations from "libc.string" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "libc.stdio" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "__builtin__" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "cpython.type" */
#if !CYTHON_USE_MODULE_STATE
static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
#endif

/* Module declarations from "cpython" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "cpython.object" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "cpython.ref" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "libc.stdint" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "libcpp" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.includes.types" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "libcpp.vector" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "libcpp.utility" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "libcpp.unordered_set" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "libcpp.stack" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.helpers" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.helpers.non_circular" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.includes.schema_cpp" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.includes.capnp_cpp" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.includes" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.helpers.helpers" */
#if !CYTHON_USE_MODULE_STATE
#endif

/* Module declarations from "capnp.lib.capnp" */
#if !CYTHON_USE_MODULE_STATE
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__StructSchemaField = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp_SchemaParser = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__Schema = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicEnum = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder = 0;
static PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__MessageBuilder = 0;
#endif
static PyObject *(*__pyx_f_5capnp_3lib_5capnp_to_python_reader)( ::capnp::DynamicValue::Reader, PyObject *); /*proto*/
static PyObject *(*__pyx_f_5capnp_3lib_5capnp_wrap_dynamic_struct_reader)( ::capnp::Response< ::capnp::DynamicStruct> &); /*proto*/
static PyObject *(*__pyx_f_5capnp_3lib_5capnp_wrap_remote_call)(PyObject *,  ::capnp::Response< ::capnp::DynamicStruct> &); /*proto*/
static  ::kj::Promise<void>  *(*__pyx_f_5capnp_3lib_5capnp_call_server_method)(PyObject *, char *,  ::capnp::CallContext< ::capnp::DynamicStruct, ::capnp::DynamicStruct> &); /*proto*/
static PyObject *(*__pyx_f_5capnp_3lib_5capnp_convert_array_pyobject)( ::kj::Array<PyObject *> &); /*proto*/
static  ::kj::Promise<PyObject *>  *(*__pyx_f_5capnp_3lib_5capnp_extract_promise)(PyObject *); /*proto*/
static  ::capnp::RemotePromise< ::capnp::DynamicStruct> *(*__pyx_f_5capnp_3lib_5capnp_extract_remote_promise)(PyObject *); /*proto*/
static PyObject *(*__pyx_f_5capnp_3lib_5capnp_wrap_kj_exception)( ::kj::Exception &); /*proto*/
static PyObject *(*__pyx_f_5capnp_3lib_5capnp_wrap_kj_exception_for_reraise)( ::kj::Exception &); /*proto*/
static PyObject *(*__pyx_f_5capnp_3lib_5capnp_get_exception_info)(PyObject *, PyObject *, PyObject *); /*proto*/

/* Module declarations from "pytact.graph_api_capnp_cython" */
#if !CYTHON_USE_MODULE_STATE
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_String_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List = 0;
#endif

/* Module declarations from "pytact.data_reader" */
#if !CYTHON_USE_MODULE_STATE
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_LowlevelDataReader = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Node = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_EdgeTarget_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Node_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofState = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofState_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Argument_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Outcome = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Outcome_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofStep = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofStep_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Representative_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Definition = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_Dataset = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__ = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__ = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context = 0;
static PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context = 0;
#endif
static PyObject *__pyx_convert_vector_to_py_uint32_t(std::vector<uint32_t>  const &); /*proto*/
static std::vector<uint32_t>  __pyx_convert_vector_from_py_uint32_t(PyObject *); /*proto*/
static std::vector<std::vector<uint32_t> >  __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(PyObject *); /*proto*/
/* #### Code section: typeinfo ### */
/* #### Code section: before_global_var ### */
#define __Pyx_MODULE_NAME "pytact.data_reader"
extern int __pyx_module_is_main_pytact__data_reader;
int __pyx_module_is_main_pytact__data_reader = 0;

/* Implementation of "pytact.data_reader" */
/* #### Code section: global_var ### */
static PyObject *__pyx_builtin_staticmethod;
static PyObject *__pyx_builtin_super;
static PyObject *__pyx_builtin_IndexError;
static PyObject *__pyx_builtin_memoryview;
static PyObject *__pyx_builtin_open;
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_enumerate;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_AssertionError;
static PyObject *__pyx_builtin_StopIteration;
static PyObject *__pyx_builtin_reversed;
static PyObject *__pyx_builtin_print;
static PyObject *__pyx_builtin_KeyError;
static PyObject *__pyx_builtin_MemoryError;
/* #### Code section: string_decls ### */
static const char __pyx_k_T[] = "T";
static const char __pyx_k_a[] = "a";
static const char __pyx_k_c[] = "c";
static const char __pyx_k_d[] = "d";
static const char __pyx_k_f[] = "f";
static const char __pyx_k_g[] = "g";
static const char __pyx_k_n[] = "n";
static const char __pyx_k_p[] = "p";
static const char __pyx_k__5[] = ".";
static const char __pyx_k__6[] = "";
static const char __pyx_k__8[] = " ";
static const char __pyx_k_dr[] = "dr";
static const char __pyx_k_ep[] = "ep";
static const char __pyx_k_gc[] = "gc";
static const char __pyx_k_mm[] = "mm";
static const char __pyx_k_mv[] = "mv";
static const char __pyx_k_pg[] = "pg";
static const char __pyx_k_rb[] = "rb";
static const char __pyx_k_Any[] = "Any";
static const char __pyx_k_Map[] = "Map";
static const char __pyx_k__10[] = "-";
static const char __pyx_k__25[] = "\n";
static const char __pyx_k__31[] = "_";
static const char __pyx_k__33[] = "*";
static const char __pyx_k_add[] = "add";
static const char __pyx_k_bin[] = "**/*.bin";
static const char __pyx_k_cls[] = "cls";
static const char __pyx_k_doc[] = "__doc__";
static const char __pyx_k_get[] = "__get__";
static const char __pyx_k_int[] = "int";
static const char __pyx_k_len[] = "__len__";
static const char __pyx_k_msg[] = "msg";
static const char __pyx_k_rep[] = "rep";
static const char __pyx_k_run[] = "run";
static const char __pyx_k_set[] = "set";
static const char __pyx_k_str[] = "str";
static const char __pyx_k_Node[] = "Node";
static const char __pyx_k_PIPE[] = "PIPE";
static const char __pyx_k_Path[] = "Path";
static const char __pyx_k__134[] = "?";
static const char __pyx_k_apic[] = "apic";
static const char __pyx_k_args[] = "args";
static const char __pyx_k_base[] = "base";
static const char __pyx_k_bool[] = "bool";
static const char __pyx_k_cast[] = "cast";
static const char __pyx_k_defs[] = "defs";
static const char __pyx_k_deps[] = "deps";
static const char __pyx_k_dict[] = "__dict__";
static const char __pyx_k_exit[] = "__exit__";
static const char __pyx_k_full[] = "full";
static const char __pyx_k_glob[] = "glob";
static const char __pyx_k_hard[] = "hard";
static const char __pyx_k_init[] = "__init__";
static const char __pyx_k_kind[] = "kind";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_mmap[] = "mmap";
static const char __pyx_k_name[] = "name";
static const char __pyx_k_node[] = "node-";
static const char __pyx_k_open[] = "open";
static const char __pyx_k_pred[] = "pred";
static const char __pyx_k_prev[] = "prev";
static const char __pyx_k_seen[] = "seen";
static const char __pyx_k_self[] = "self";
static const char __pyx_k_send[] = "send";
static const char __pyx_k_size[] = "size";
static const char __pyx_k_soft[] = "soft";
static const char __pyx_k_spec[] = "__spec__";
static const char __pyx_k_temp[] = "temp";
static const char __pyx_k_term[] = "term";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_text[] = "text";
static const char __pyx_k_time[] = "time";
static const char __pyx_k_Union[] = "Union";
static const char __pyx_k_cache[] = "cache";
static const char __pyx_k_capnp[] = "capnp";
static const char __pyx_k_check[] = "check";
static const char __pyx_k_child[] = "child";
static const char __pyx_k_close[] = "close";
static const char __pyx_k_count[] = "count";
static const char __pyx_k_edges[] = "edges";
static const char __pyx_k_enter[] = "__enter__";
static const char __pyx_k_eprev[] = "eprev";
static const char __pyx_k_float[] = "float";
static const char __pyx_k_fname[] = "fname";
static const char __pyx_k_get_2[] = "get";
static const char __pyx_k_graph[] = "graph";
static const char __pyx_k_ident[] = "ident";
static const char __pyx_k_index[] = "index";
static const char __pyx_k_items[] = "items";
static const char __pyx_k_major[] = "major";
static const char __pyx_k_nodes[] = "nodes";
static const char __pyx_k_parts[] = "parts";
static const char __pyx_k_preds[] = "preds";
static const char __pyx_k_print[] = "print";
static const char __pyx_k_proof[] = "proof";
static const char __pyx_k_range[] = "range";
static const char __pyx_k_sleep[] = "sleep";
static const char __pyx_k_stack[] = "stack";
static const char __pyx_k_start[] = "start";
static const char __pyx_k_super[] = "super";
static const char __pyx_k_throw[] = "throw";
static const char __pyx_k_which[] = "which";
static const char __pyx_k_NodeId[] = "NodeId";
static const char __pyx_k_Path_2[] = "Path ";
static const char __pyx_k_SIGINT[] = "SIGINT";
static const char __pyx_k_access[] = "access";
static const char __pyx_k_decode[] = "decode";
static const char __pyx_k_enable[] = "enable";
static const char __pyx_k_exists[] = "exists";
static const char __pyx_k_fileno[] = "fileno";
static const char __pyx_k_fnames[] = "fnames";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_init_2[] = "init";
static const char __pyx_k_is_dir[] = "is_dir";
static const char __pyx_k_length[] = "length";
static const char __pyx_k_module[] = "__module__";
static const char __pyx_k_name_2[] = "__name__";
static const char __pyx_k_node_2[] = "node";
static const char __pyx_k_nodeid[] = "nodeid";
static const char __pyx_k_parent[] = "parent";
static const char __pyx_k_pytact[] = "pytact";
static const char __pyx_k_reader[] = "reader";
static const char __pyx_k_record[] = "record";
static const char __pyx_k_reduce[] = "__reduce__";
static const char __pyx_k_result[] = "result";
static const char __pyx_k_return[] = "return";
static const char __pyx_k_schema[] = "schema";
static const char __pyx_k_shutil[] = "shutil";
static const char __pyx_k_signal[] = "signal";
static const char __pyx_k_socket[] = "socket";
static const char __pyx_k_stderr[] = "stderr";
static const char __pyx_k_stdout[] = "stdout";
static const char __pyx_k_tactic[] = "tactic";
static const char __pyx_k_typing[] = "typing";
static const char __pyx_k_update[] = "update";
static const char __pyx_k_Dataset[] = "Dataset";
static const char __pyx_k_Outcome[] = "Outcome";
static const char __pyx_k_Request[] = "Request";
static const char __pyx_k_SIG_DFL[] = "SIG_DFL";
static const char __pyx_k_TypeVar[] = "TypeVar";
static const char __pyx_k_Unknown[] = "Unknown";
static const char __pyx_k_cluster[] = "cluster";
static const char __pyx_k_context[] = "context";
static const char __pyx_k_count_2[] = "_count";
static const char __pyx_k_dataset[] = "dataset";
static const char __pyx_k_disable[] = "disable";
static const char __pyx_k_getitem[] = "__getitem__";
static const char __pyx_k_graphid[] = "graphid";
static const char __pyx_k_is_file[] = "is_file";
static const char __pyx_k_lreader[] = "lreader";
static const char __pyx_k_new_set[] = "new_set";
static const char __pyx_k_pathlib[] = "pathlib";
static const char __pyx_k_predict[] = "predict";
static const char __pyx_k_prepare[] = "__prepare__";
static const char __pyx_k_request[] = "request";
static const char __pyx_k_tactics[] = "tactics";
static const char __pyx_k_to_dict[] = "to_dict";
static const char __pyx_k_BinaryIO[] = "BinaryIO";
static const char __pyx_k_Callable[] = "Callable";
static const char __pyx_k_Iterable[] = "Iterable";
static const char __pyx_k_KeyError[] = "KeyError";
static const char __pyx_k_NodeHash[] = "NodeHash";
static const char __pyx_k_Original[] = "Original";
static const char __pyx_k_Response[] = "Response";
static const char __pyx_k_Sequence[] = "Sequence";
static const char __pyx_k_TacticId[] = "TacticId";
static const char __pyx_k_but_file[] = " but file ";
static const char __pyx_k_children[] = "children";
static const char __pyx_k_depIndex[] = "depIndex";
static const char __pyx_k_getstate[] = "__getstate__";
static const char __pyx_k_is_mount[] = "is_mount";
static const char __pyx_k_list_int[] = "list[int]";
static const char __pyx_k_lowlevel[] = "lowlevel";
static const char __pyx_k_new_soft[] = "new_soft";
static const char __pyx_k_original[] = "original";
static const char __pyx_k_prev_sig[] = "prev_sig";
static const char __pyx_k_previous[] = "previous";
static const char __pyx_k_qualname[] = "__qualname__";
static const char __pyx_k_resource[] = "resource";
static const char __pyx_k_response[] = "response";
static const char __pyx_k_reversed[] = "reversed";
static const char __pyx_k_set_Node[] = "set[Node]";
static const char __pyx_k_set_name[] = "__set_name__";
static const char __pyx_k_setstate[] = "__setstate__";
static const char __pyx_k_ExitStack[] = "ExitStack";
static const char __pyx_k_Generator[] = "Generator";
static const char __pyx_k_Inductive[] = "Inductive";
static const char __pyx_k_Node_List[] = "Node_List";
static const char __pyx_k_ProofStep[] = "ProofStep";
static const char __pyx_k_TupleLike[] = "TupleLike";
static const char __pyx_k_TypeAlias[] = "TypeAlias";
static const char __pyx_k_TypeError[] = "TypeError";
static const char __pyx_k_alignment[] = "alignment";
static const char __pyx_k_arguments[] = "arguments";
static const char __pyx_k_dataclass[] = "dataclass";
static const char __pyx_k_dep_index[] = "dep_index";
static const char __pyx_k_enumerate[] = "enumerate";
static const char __pyx_k_getrlimit[] = "getrlimit";
static const char __pyx_k_inclusive[] = "inclusive";
static const char __pyx_k_isenabled[] = "isenabled";
static const char __pyx_k_itertools[] = "itertools";
static const char __pyx_k_list_Node[] = "list[Node]";
static const char __pyx_k_metaclass[] = "__metaclass__";
static const char __pyx_k_nodeIndex[] = "nodeIndex";
static const char __pyx_k_node_hash[] = "node_hash";
static const char __pyx_k_propagate[] = "_propagate";
static const char __pyx_k_pyx_state[] = "__pyx_state";
static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
static const char __pyx_k_setrlimit[] = "setrlimit";
static const char __pyx_k_threading[] = "threading";
static const char __pyx_k_Definition[] = "Definition";
static const char __pyx_k_Discharged[] = "Discharged";
static const char __pyx_k_IndexError[] = "IndexError";
static const char __pyx_k_Projection[] = "Projection";
static const char __pyx_k_ProofState[] = "ProofState";
static const char __pyx_k_ValueError[] = "ValueError";
static const char __pyx_k_as_builder[] = "as_builder";
static const char __pyx_k_confidence[] = "confidence";
static const char __pyx_k_contextlib[] = "contextlib";
static const char __pyx_k_cython_msg[] = "cython_msg";
static const char __pyx_k_definition[] = "definition";
static const char __pyx_k_from_bytes[] = "from_bytes";
static const char __pyx_k_immutables[] = "immutables";
static const char __pyx_k_initialize[] = "initialize";
static const char __pyx_k_is_predict[] = "is_predict";
static const char __pyx_k_lgenerator[] = "lgenerator";
static const char __pyx_k_memoryview[] = "memoryview";
static const char __pyx_k_mountpoint[] = "mountpoint";
static const char __pyx_k_node_by_id[] = "node_by_id";
static const char __pyx_k_node_label[] = "node_label";
static const char __pyx_k_prediction[] = "prediction";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_returncode[] = "returncode";
static const char __pyx_k_spine_only[] = "spine_only";
static const char __pyx_k_squashfuse[] = "squashfuse";
static const char __pyx_k_stack_size[] = "stack_size";
static const char __pyx_k_subprocess[] = "subprocess";
static const char __pyx_k_tacticText[] = "tacticText";
static const char __pyx_k_ACCESS_READ[] = "ACCESS_READ";
static const char __pyx_k_Constructor[] = "Constructor";
static const char __pyx_k_MemoryError[] = "MemoryError";
static const char __pyx_k_Substituted[] = "Substituted";
static const char __pyx_k_annotations[] = "__annotations__";
static const char __pyx_k_child_graph[] = "child_graph";
static const char __pyx_k_create_mmap[] = "create_mmap";
static const char __pyx_k_data_reader[] = "data_reader";
static const char __pyx_k_dataclasses[] = "dataclasses";
static const char __pyx_k_definitions[] = "definitions";
static const char __pyx_k_edge_target[] = "edge_target";
static const char __pyx_k_graph_index[] = "graph_index";
static const char __pyx_k_initialized[] = "initialized";
static const char __pyx_k_main_thread[] = "main_thread";
static const char __pyx_k_new_context[] = "new_context";
static const char __pyx_k_new_message[] = "new_message";
static const char __pyx_k_predictions[] = "predictions";
static const char __pyx_k_proof_state[] = "proof_state";
static const char __pyx_k_propagate_2[] = "propagate";
static const char __pyx_k_relative_to[] = "relative_to";
static const char __pyx_k_sub_context[] = "sub_context";
static const char __pyx_k_synchronize[] = "synchronize";
static const char __pyx_k_tactic_text[] = "tactic_text";
static const char __pyx_k_with_suffix[] = "with_suffix";
static const char __pyx_k_Outcome_List[] = "Outcome_List";
static const char __pyx_k_ProofStateId[] = "ProofStateId";
static const char __pyx_k_Unresolvable[] = "Unresolvable";
static const char __pyx_k_across_files[] = "across_files";
static const char __pyx_k_current_node[] = "current_node";
static const char __pyx_k_data_version[] = "data_version";
static const char __pyx_k_dataset_path[] = "dataset_path";
static const char __pyx_k_dependencies[] = "dependencies";
static const char __pyx_k_index_getter[] = "index_getter";
static const char __pyx_k_initializing[] = "_initializing";
static const char __pyx_k_is_coroutine[] = "_is_coroutine";
static const char __pyx_k_message_file[] = "message_file";
static const char __pyx_k_staticmethod[] = "staticmethod";
static const char __pyx_k_stringsource[] = "<stringsource>";
static const char __pyx_k_synchronized[] = "synchronized";
static const char __pyx_k_write_packed[] = "write_packed";
static const char __pyx_k_Argument_List[] = "Argument_List";
static const char __pyx_k_BinaryIO_None[] = "BinaryIO | None";
static const char __pyx_k_Out_of_bounds[] = "Out of bounds";
static const char __pyx_k_RLIMIT_NOFILE[] = "RLIMIT_NOFILE";
static const char __pyx_k_StopIteration[] = "StopIteration";
static const char __pyx_k_class_getitem[] = "__class_getitem__";
static const char __pyx_k_enter_context[] = "enter_context";
static const char __pyx_k_init_subclass[] = "__init_subclass__";
static const char __pyx_k_is_initialize[] = "is_initialize";
static const char __pyx_k_node_contents[] = "node_contents";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_setup_dataset[] = "setup_dataset";
static const char __pyx_k_socket_socket[] = "socket.socket";
static const char __pyx_k_AssertionError[] = "AssertionError";
static const char __pyx_k_Callable_int_T[] = "Callable[[int], T]";
static const char __pyx_k_Dataset_Reader[] = "Dataset_Reader";
static const char __pyx_k_ManualConstant[] = "ManualConstant";
static const char __pyx_k_ProofStep_List[] = "ProofStep_List";
static const char __pyx_k_children_index[] = "children_index";
static const char __pyx_k_children_limit[] = "children_limit";
static const char __pyx_k_contextmanager[] = "contextmanager";
static const char __pyx_k_currentVersion[] = "currentVersion";
static const char __pyx_k_current_thread[] = "current_thread";
static const char __pyx_k_definitions_it[] = "definitions_it";
static const char __pyx_k_global_context[] = "_global_context";
static const char __pyx_k_index_getter_2[] = "_index_getter";
static const char __pyx_k_is_synchronize[] = "is_synchronize";
static const char __pyx_k_log_annotation[] = "log_annotation";
static const char __pyx_k_message_reader[] = "message_reader";
static const char __pyx_k_representative[] = "representative";
static const char __pyx_k_set_Definition[] = "set[Definition]";
static const char __pyx_k_textPrediction[] = "textPrediction";
static const char __pyx_k_EdgeTarget_List[] = "EdgeTarget_List";
static const char __pyx_k_ProofState_List[] = "ProofState_List";
static const char __pyx_k_TupleLike___len[] = "TupleLike.__len__";
static const char __pyx_k_collections_abc[] = "collections.abc";
static const char __pyx_k_graph_api_capnp[] = "graph_api_capnp";
static const char __pyx_k_list_Definition[] = "list[Definition]";
static const char __pyx_k_local_to_global[] = "local_to_global";
static const char __pyx_k_representatives[] = "representatives";
static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
static const char __pyx_k_unknown_tactics[] = "unknown_tactics";
static const char __pyx_k_Definition___get[] = "Definition.__get__";
static const char __pyx_k_Servers_response[] = "\nServers response: ";
static const char __pyx_k_Squashfuse_error[] = "\nSquashfuse error: \n";
static const char __pyx_k_TacticalConstant[] = "TacticalConstant";
static const char __pyx_k_TupleLike___init[] = "TupleLike.__init__";
static const char __pyx_k_clear_write_flag[] = "clear_write_flag";
static const char __pyx_k_global_context_2[] = "global_context";
static const char __pyx_k_should_propagate[] = "should_propagate";
static const char __pyx_k_unalignedTactics[] = "unalignedTactics";
static const char __pyx_k_GlobalContextSets[] = "GlobalContextSets";
static const char __pyx_k_dict_Path_Dataset[] = "dict[Path, Dataset]";
static const char __pyx_k_external_previous[] = "external_previous";
static const char __pyx_k_group_by_clusters[] = "_group_by_clusters";
static const char __pyx_k_node_dependencies[] = "node_dependencies";
static const char __pyx_k_recorded_response[] = "recorded_response";
static const char __pyx_k_Dataset_node_by_id[] = "Dataset.node_by_id";
static const char __pyx_k_LowlevelDataReader[] = "LowlevelDataReader";
static const char __pyx_k_PredictionProtocol[] = "PredictionProtocol";
static const char __pyx_k_Sequence_ProofStep[] = "Sequence[ProofStep]";
static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_global_context_set[] = "_global_context_set";
static const char __pyx_k_is_check_alignment[] = "is_check_alignment";
static const char __pyx_k_pytact_data_reader[] = "pytact.data_reader";
static const char __pyx_k_Dataset_definitions[] = "Dataset.definitions";
static const char __pyx_k_Iterable_Definition[] = "Iterable[Definition]";
static const char __pyx_k_Representative_List[] = "Representative_List";
static const char __pyx_k_TupleLike___getitem[] = "TupleLike.__getitem__";
static const char __pyx_k_convert_predictions[] = "convert_predictions";
static const char __pyx_k_file_dataset_reader[] = "file_dataset_reader";
static const char __pyx_k_online_data_predict[] = "online_data_predict";
static const char __pyx_k_prediction_requests[] = "prediction_requests";
static const char __pyx_k_set_Definition_None[] = "set[Definition] | None";
static const char __pyx_k_unknown_definitions[] = "unknown_definitions";
static const char __pyx_k_Capnp_protocol_error[] = "Capnp protocol error";
static const char __pyx_k_GlobalContextMessage[] = "GlobalContextMessage";
static const char __pyx_k_Mount_did_not_appear[] = ". Mount did not appear.";
static const char __pyx_k_Node___reduce_cython[] = "Node.__reduce_cython__";
static const char __pyx_k_TacticPredictionText[] = "TacticPredictionText";
static const char __pyx_k_global_context_set_2[] = "global_context_set";
static const char __pyx_k_lowlevel_data_reader[] = "lowlevel_data_reader";
static const char __pyx_k_next_disabled_sigint[] = "next_disabled_sigint";
static const char __pyx_k_prediction_generator[] = "prediction_generator";
static const char __pyx_k_read_multiple_packed[] = "read_multiple_packed";
static const char __pyx_k_unalignedDefinitions[] = "unalignedDefinitions";
static const char __pyx_k_CheckAlignmentMessage[] = "CheckAlignmentMessage";
static const char __pyx_k_ManualSectionConstant[] = "ManualSectionConstant";
static const char __pyx_k_TacticPredictionGraph[] = "TacticPredictionGraph";
static const char __pyx_k_TacticPredictionsText[] = "TacticPredictionsText";
static const char __pyx_k_clustered_definitions[] = "clustered_definitions";
static const char __pyx_k_lowlevel_to_highlevel[] = "lowlevel_to_highlevel";
static const char __pyx_k_CheckAlignmentResponse[] = "CheckAlignmentResponse";
static const char __pyx_k_Dataset_does_not_exist[] = "Dataset does not exist: ";
static const char __pyx_k_GlobalContextSets_None[] = "GlobalContextSets | None";
static const char __pyx_k_Node___setstate_cython[] = "Node.__setstate_cython__";
static const char __pyx_k_TacticPredictionsGraph[] = "TacticPredictionsGraph";
static const char __pyx_k_cluster_representative[] = "cluster_representative";
static const char __pyx_k_graph_api_capnp_cython[] = "graph_api_capnp_cython";
static const char __pyx_k_pytact_data_reader_pyx[] = "pytact/data_reader.pyx";
static const char __pyx_k_pytact_graph_api_capnp[] = "pytact.graph_api_capnp";
static const char __pyx_k_Dataset_Definition_List[] = "Dataset_Definition_List";
static const char __pyx_k_Dataset___reduce_cython[] = "Dataset.__reduce_cython__";
static const char __pyx_k_Generator_Any_None_None[] = "Generator[Any, None, None]";
static const char __pyx_k_OnlineDefinitionsReader[] = "OnlineDefinitionsReader";
static const char __pyx_k_Outcome___reduce_cython[] = "Outcome.__reduce_cython__";
static const char __pyx_k_TacticalSectionConstant[] = "TacticalSectionConstant";
static const char __pyx_k_Unable_to_mount_dataset[] = "Unable to mount dataset ";
static const char __pyx_k_capnp_message_generator[] = "capnp_message_generator";
static const char __pyx_k_definition_dependencies[] = "definition_dependencies";
static const char __pyx_k_Callable_Definition_bool[] = "Callable[[Definition], bool]";
static const char __pyx_k_GlobalContextSets___init[] = "GlobalContextSets.__init__";
static const char __pyx_k_Iterable_list_Definition[] = "Iterable[list[Definition]]";
static const char __pyx_k_clustered_global_context[] = "clustered_global_context";
static const char __pyx_k_prediction_generator_sub[] = "prediction_generator_sub";
static const char __pyx_k_traversal_limit_in_words[] = "traversal_limit_in_words";
static const char __pyx_k_Dataset___setstate_cython[] = "Dataset.__setstate_cython__";
static const char __pyx_k_Definition_global_context[] = "Definition.global_context";
static const char __pyx_k_Node_List___reduce_cython[] = "Node_List.__reduce_cython__";
static const char __pyx_k_Outcome___setstate_cython[] = "Outcome.__setstate_cython__";
static const char __pyx_k_ProofStep___reduce_cython[] = "ProofStep.__reduce_cython__";
static const char __pyx_k_The_servers_response_to_a[] = "The servers response to a ";
static const char __pyx_k_Dataset___get___locals_get[] = "Dataset.__get__.<locals>.get";
static const char __pyx_k_Definition___reduce_cython[] = "Definition.__reduce_cython__";
static const char __pyx_k_Definition__global_context[] = "Definition._global_context";
static const char __pyx_k_ProofState___reduce_cython[] = "ProofState.__reduce_cython__";
static const char __pyx_k_contains_data_versioned_as[] = " contains data versioned as ";
static const char __pyx_k_list_TacticPredictionsText[] = "list[TacticPredictionsText]";
static const char __pyx_k_Node_List___setstate_cython[] = "Node_List.__setstate_cython__";
static const char __pyx_k_ProofStep___setstate_cython[] = "ProofStep.__setstate_cython__";
static const char __pyx_k_list_TacticPredictionsGraph[] = "list[TacticPredictionsGraph]";
static const char __pyx_k_Definition___setstate_cython[] = "Definition.__setstate_cython__";
static const char __pyx_k_GlobalContextSets__propagate[] = "GlobalContextSets._propagate";
static const char __pyx_k_Outcome_List___reduce_cython[] = "Outcome_List.__reduce_cython__";
static const char __pyx_k_ProofState___setstate_cython[] = "ProofState.__setstate_cython__";
static const char __pyx_k_message_was_not_equal_to_the[] = " message was not equal to the ";
static const char __pyx_k_Argument_List___reduce_cython[] = "Argument_List.__reduce_cython__";
static const char __pyx_k_Dataset_clustered_definitions[] = "Dataset.clustered_definitions";
static const char __pyx_k_Definition__group_by_clusters[] = "Definition._group_by_clusters";
static const char __pyx_k_GlobalContextSets_new_context[] = "GlobalContextSets.new_context";
static const char __pyx_k_GlobalContextSets_sub_context[] = "GlobalContextSets.sub_context";
static const char __pyx_k_online_definitions_initialize[] = "online_definitions_initialize";
static const char __pyx_k_pytact_graph_api_capnp_cython[] = "pytact.graph_api_capnp_cython";
static const char __pyx_k_Generator_ProofState_None_None[] = "Generator[ProofState, None, None]";
static const char __pyx_k_Incorrect_predictions_received[] = "Incorrect predictions received";
static const char __pyx_k_Outcome_List___setstate_cython[] = "Outcome_List.__setstate_cython__";
static const char __pyx_k_ProofStep_List___reduce_cython[] = "ProofStep_List.__reduce_cython__";
static const char __pyx_k_Argument_List___setstate_cython[] = "Argument_List.__setstate_cython__";
static const char __pyx_k_EdgeTarget_List___reduce_cython[] = "EdgeTarget_List.__reduce_cython__";
static const char __pyx_k_ProofState_List___reduce_cython[] = "ProofState_List.__reduce_cython__";
static const char __pyx_k_but_file_Coq_sent_a_message_ver[] = " but file Coq sent a message versioned as ";
static const char __pyx_k_doesn_t_appear_to_be_the_root_o[] = " doesn't appear to be the root of a dataset. File ";
static const char __pyx_k_message_was_equal_to_the_record[] = " message was equal to the recorded response";
static const char __pyx_k_suggests_that_the_real_root_mig[] = " suggests that the real root might be ";
static const char __pyx_k_Dataset_Definition_List___reduce[] = "Dataset_Definition_List.__reduce_cython__";
static const char __pyx_k_Dataset_Definition_List___setsta[] = "Dataset_Definition_List.__setstate_cython__";
static const char __pyx_k_Definition_clustered_global_cont[] = "Definition.clustered_global_context";
static const char __pyx_k_EdgeTarget_List___setstate_cytho[] = "EdgeTarget_List.__setstate_cython__";
static const char __pyx_k_Generator_GlobalContextMessage_P[] = "Generator[GlobalContextMessage | ProofState | CheckAlignmentMessage, None | TacticPredictionsGraph | TacticPredictionsText | CheckAlignmentResponse, None]";
static const char __pyx_k_Generator_GlobalContextSets_None[] = "Generator[GlobalContextSets, None, None]";
static const char __pyx_k_Generator_LowlevelDataReader_Non[] = "Generator[LowlevelDataReader, None, None]";
static const char __pyx_k_Generator_OnlineDefinitionsReade[] = "Generator[OnlineDefinitionsReader, None, None]";
static const char __pyx_k_Generator_dict_Path_Dataset_None[] = "Generator[dict[Path, Dataset], None, None]";
static const char __pyx_k_Generator_pytact_graph_api_capnp[] = "Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader, capnp.lib.capnp._DynamicStructBuilder, None]";
static const char __pyx_k_GlobalContextSets__global_contex[] = "GlobalContextSets._global_context_set";
static const char __pyx_k_GlobalContextSets_global_context[] = "GlobalContextSets.global_context_set";
static const char __pyx_k_GlobalContextSets_new_context_lo[] = "GlobalContextSets.new_context.<locals>.<lambda>";
static const char __pyx_k_Lazily_retrieve_a_the_global_con[] = "Lazily retrieve a the global context of a definition as a set, with memoization.\n\n    Because this class can allocate (large) amounts of memory, use it as a context-manager. To create a new\n    instance, and retrieve the context of a definition, use:\n    ```\n    with GlobalContextSets.new_context() as gcs:\n        gcs.global_context_set(my_definition)\n    ```\n    This context will be cached, as well as intermediate results (global contexts of other definitions) as\n    long as the context-set is in scope. Caching can be nested by using `sub_context`:\n    ```\n    with GlobalContextSets.new_context() as gcs:\n        gcs.global_context_set(my_definition)\n        with gcs.sub_context(lambda d:is_file_representative) as gcs_sub:\n            # gcs_sub remembers anything in the case of gcs\n            # caching is propagated to the parent cache only if the provided lambda evaluates to true\n            gcs_sub.global_context_set(my_definition2)\n    ```\n    ";
static const char __pyx_k_LowlevelDataReader___reduce_cyth[] = "LowlevelDataReader.__reduce_cython__";
static const char __pyx_k_LowlevelDataReader___setstate_cy[] = "LowlevelDataReader.__setstate_cython__";
static const char __pyx_k_LowlevelDataReader_local_to_glob[] = "LowlevelDataReader.local_to_global";
static const char __pyx_k_Not_all_prediction_requests_were[] = "Not all prediction requests were consumed";
static const char __pyx_k_OnlineDefinitionsReader___reduce[] = "OnlineDefinitionsReader.__reduce_cython__";
static const char __pyx_k_OnlineDefinitionsReader___setsta[] = "OnlineDefinitionsReader.__setstate_cython__";
static const char __pyx_k_OnlineDefinitionsReader_clustere[] = "OnlineDefinitionsReader.clustered_definitions";
static const char __pyx_k_OnlineDefinitionsReader_definiti[] = "OnlineDefinitionsReader.definitions";
static const char __pyx_k_OnlineDefinitionsReader_local_to[] = "OnlineDefinitionsReader.local_to_global";
static const char __pyx_k_Options_across_files_True_and_sp[] = "Options across_files = True and spine_only = False are incompatible";
static const char __pyx_k_ProofState_List___setstate_cytho[] = "ProofState_List.__setstate_cython__";
static const char __pyx_k_ProofStep_List___setstate_cython[] = "ProofStep_List.__setstate_cython__";
static const char __pyx_k_Representative_List___reduce_cyt[] = "Representative_List.__reduce_cython__";
static const char __pyx_k_Representative_List___setstate_c[] = "Representative_List.__setstate_cython__";
static const char __pyx_k_There_does_not_appear_to_be_a_da[] = "There does not appear to be a dataset located at ";
static const char __pyx_k_This_library_is_compiled_for_a_d[] = "This library is compiled for a dataset containing data versioned as ";
static const char __pyx_k_This_module_provides_read_access[] = "This module provides read access to dataset files of a Tactican Graph dataset.\nAdditionally, some support for communicating with a Coq process exists.\n\n# Reading a dataset\n\nThe dataset is mapped into memory using mmap, allowing random access to it's\nstructures while keeping memory low. This file contains three entry-points to a\ndataset in order of preference:\n\n1. Contextmanager `data_reader` provides high-level access to the data\n   in directory `path`. This is the preferred entry-point unless you need\n   something special.\n2. Contextmanager `lowlevel_data_reader` provides low-level access to\n   the data in directory `path`, giving direct access to the Cap'n Proto structures\n   of the dataset. Use this when `data_reader` is too slow or you need access\n   to data not provided by `data_reader`.\n3. Contextmanager `file_dataset_reader` provides low-level access to\n   the Cap'n Proto structures of a single file. Using this is usually not\n   advisable.\n\nAdditionally, some indexing helpers are defined:\n- `GlobalContextSets` calculates and caches the global context of a definition\n  as a set, also caching intermediate results.\n- `definition_dependencies` and `node_dependencies` traverse the graph starting\n  from a node and return all direct, non-transitive definitions that node depends on.\n\n# Communicating with a Coq process\n\nCommunication with a Coq process can be done either through a high-level or\nlow-level interface.\n\n## Highlevel interface\n\nThe function `capnp_message_generator` converts a socket into a nested generator that\nyields request messages for predictions and expects to be sent response messages\nin return. A simple example of how to handle these messages is in `fake_python_server.py`.\nSome docs can be found with `capnp_message_generator`.\n\n## Lowlevel interface\n\nThe function `capnp_message_generator_lowlevel` converts a socket into a generator that\nyields lowlevel cap'n proto request messages for predictions and expects"" to be sent cap'n proto\nmessages in return. There are four types of messages `msg` Coq sends.\n1. Synchronize: If `msg.is_synchronize` is true, Coq is attempting to synchronize\n   it's state with the server. A `PredictionProtocol.Response.synchronized` message is expected\n   in return.\n2. Initialize: If `msg.is_initialize` is true, Coq is sending a list of available\n   tactics and the current global context to be added to an existing stack of global context\n   information. An empty stack can be created through `empty_online_definitions_initialize`.\n   To add an initialize message to the stack, you can use\n   ```\n   with online_definitions_initialize(existing_stack, msg) as definitions:\n       print(type(definitions))\n   ```\n   Any subsequent messages will be made in the context of the\n   tactics and predictions sent in this message, until an initialize message is received\n   such that `msg.initialize.stack_size` is smaller than the current stack size.\n\n   A `PredictionProtocol.Response.initialized` message is expected in response of this message.\n4. Predict: If `msg.is_predict` is true, Coq is asking to predict a list of plausible\n   tactics given a proof state. The proof state can be easily accessed using\n   ```\n   with online_data_predict(definitions, msg.predict) as proof_state:\n       print(dir(proof_state))\n   ```\n   A `PredictionProtocol.Response.prediction` or `PredictionProtocol.Response.textPrediction`\n   message is expected in return.\n5. Check Alignment: If `msg.is_check_alignment` is true, then Coq is asking the server\n   to check which tactics and definitions are known to it. A\n   `PredictionProtocol.Response.alignment` message is expected in return.\n\nThe `capnp_message_generator` function can also dump the sequence of messages send\nand received to a file. One can then use `capnp_message_generator_from_file` to replay\nthat sequence against a server, either in a unit-test where the call to `capnp_message_generator`\nis mocke""d by `capnp_message_generator_from_file`, or using a fully fledged socket test\nas can be found in `fake_coq_client.py`.\n";
static const char __pyx_k_Unable_to_mount_dataset_Executab[] = "Unable to mount dataset. Executable 'squashfuse' not found.";
static const char __pyx_k_Unable_to_mount_dataset_Mountpoi[] = "Unable to mount dataset. Mountpoint does not exist: ";
static const char __pyx_k_Unable_to_mount_dataset_Squashfu[] = "Unable to mount dataset. Squashfuse invocation:\n";
static const char __pyx_k_capnp_message_generator_from_fil[] = "capnp_message_generator_from_file_lowlevel";
static const char __pyx_k_capnp_message_generator_lowlevel[] = "capnp_message_generator_lowlevel";
static const char __pyx_k_empty_online_definitions_initial[] = "empty_online_definitions_initialize";
static const char __pyx_k_file_dataset_reader_locals_creat[] = "file_dataset_reader.<locals>.create_mmap";
static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
static const char __pyx_k_prediction_generator_locals_pred[] = "prediction_generator.<locals>.prediction_generator_sub";
static const char __pyx_k_pytact_graph_api_capnp_cython_Ab[] = "pytact.graph_api_capnp_cython.AbstractTactic_Reader_List";
static const char __pyx_k_recorded_response_Recorded_respo[] = "recorded response.\nRecorded response: ";
static const char __pyx_k_self_edges_self_graph_index_cann[] = "self.edges,self.graph_index cannot be converted to a Python object for pickling";
static const char __pyx_k_self_graph_index_cannot_be_conve[] = "self.graph_index cannot be converted to a Python object for pickling";
static const char __pyx_k_self_graph_index_self_node_canno[] = "self.graph_index,self.node cannot be converted to a Python object for pickling";
static const char __pyx_k_self_graph_index_self_reader_can[] = "self.graph_index,self.reader cannot be converted to a Python object for pickling";
static const char __pyx_k_capnp_message_generator_from_fil_2[] = "capnp_message_generator_from_file";
static const char __pyx_k_capnp_message_generator_lowlevel_2[] = "capnp_message_generator_lowlevel.<locals>.next_disabled_sigint";
#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_n_s_ACCESS_READ;
static PyObject *__pyx_n_s_Any;
static PyObject *__pyx_n_s_Argument_List;
static PyObject *__pyx_n_s_Argument_List___reduce_cython;
static PyObject *__pyx_n_s_Argument_List___setstate_cython;
static PyObject *__pyx_n_s_AssertionError;
static PyObject *__pyx_n_s_BinaryIO;
static PyObject *__pyx_kp_s_BinaryIO_None;
static PyObject *__pyx_n_s_Callable;
static PyObject *__pyx_kp_s_Callable_Definition_bool;
static PyObject *__pyx_kp_s_Callable_int_T;
static PyObject *__pyx_kp_u_Capnp_protocol_error;
static PyObject *__pyx_n_s_CheckAlignmentMessage;
static PyObject *__pyx_n_s_CheckAlignmentResponse;
static PyObject *__pyx_n_s_Constructor;
static PyObject *__pyx_n_s_Dataset;
static PyObject *__pyx_n_s_Dataset_Definition_List;
static PyObject *__pyx_n_s_Dataset_Definition_List___reduce;
static PyObject *__pyx_n_s_Dataset_Definition_List___setsta;
static PyObject *__pyx_n_s_Dataset_Reader;
static PyObject *__pyx_n_s_Dataset___get___locals_get;
static PyObject *__pyx_n_s_Dataset___reduce_cython;
static PyObject *__pyx_n_s_Dataset___setstate_cython;
static PyObject *__pyx_n_s_Dataset_clustered_definitions;
static PyObject *__pyx_n_s_Dataset_definitions;
static PyObject *__pyx_kp_u_Dataset_does_not_exist;
static PyObject *__pyx_n_s_Dataset_node_by_id;
static PyObject *__pyx_n_s_Definition;
static PyObject *__pyx_n_s_Definition___get;
static PyObject *__pyx_n_s_Definition___reduce_cython;
static PyObject *__pyx_n_s_Definition___setstate_cython;
static PyObject *__pyx_n_s_Definition__global_context;
static PyObject *__pyx_n_s_Definition__group_by_clusters;
static PyObject *__pyx_n_s_Definition_clustered_global_cont;
static PyObject *__pyx_n_s_Definition_global_context;
static PyObject *__pyx_n_s_Discharged;
static PyObject *__pyx_n_s_EdgeTarget_List;
static PyObject *__pyx_n_s_EdgeTarget_List___reduce_cython;
static PyObject *__pyx_n_s_EdgeTarget_List___setstate_cytho;
static PyObject *__pyx_n_s_ExitStack;
static PyObject *__pyx_n_s_Generator;
static PyObject *__pyx_kp_s_Generator_Any_None_None;
static PyObject *__pyx_kp_s_Generator_GlobalContextMessage_P;
static PyObject *__pyx_kp_s_Generator_GlobalContextSets_None;
static PyObject *__pyx_kp_s_Generator_LowlevelDataReader_Non;
static PyObject *__pyx_kp_s_Generator_OnlineDefinitionsReade;
static PyObject *__pyx_kp_s_Generator_ProofState_None_None;
static PyObject *__pyx_kp_s_Generator_dict_Path_Dataset_None;
static PyObject *__pyx_kp_s_Generator_pytact_graph_api_capnp;
static PyObject *__pyx_n_s_GlobalContextMessage;
static PyObject *__pyx_n_s_GlobalContextSets;
static PyObject *__pyx_kp_s_GlobalContextSets_None;
static PyObject *__pyx_n_s_GlobalContextSets___init;
static PyObject *__pyx_n_s_GlobalContextSets__global_contex;
static PyObject *__pyx_n_s_GlobalContextSets__propagate;
static PyObject *__pyx_n_s_GlobalContextSets_global_context;
static PyObject *__pyx_n_s_GlobalContextSets_new_context;
static PyObject *__pyx_n_s_GlobalContextSets_new_context_lo;
static PyObject *__pyx_n_s_GlobalContextSets_sub_context;
static PyObject *__pyx_kp_u_Incorrect_predictions_received;
static PyObject *__pyx_n_s_IndexError;
static PyObject *__pyx_n_s_Inductive;
static PyObject *__pyx_n_s_Iterable;
static PyObject *__pyx_kp_s_Iterable_Definition;
static PyObject *__pyx_kp_s_Iterable_list_Definition;
static PyObject *__pyx_n_s_KeyError;
static PyObject *__pyx_kp_s_Lazily_retrieve_a_the_global_con;
static PyObject *__pyx_n_s_LowlevelDataReader;
static PyObject *__pyx_n_s_LowlevelDataReader___reduce_cyth;
static PyObject *__pyx_n_s_LowlevelDataReader___setstate_cy;
static PyObject *__pyx_n_s_LowlevelDataReader_local_to_glob;
static PyObject *__pyx_n_s_ManualConstant;
static PyObject *__pyx_n_s_ManualSectionConstant;
static PyObject *__pyx_n_s_Map;
static PyObject *__pyx_n_s_MemoryError;
static PyObject *__pyx_kp_u_Mount_did_not_appear;
static PyObject *__pyx_n_s_Node;
static PyObject *__pyx_n_s_NodeHash;
static PyObject *__pyx_n_s_NodeId;
static PyObject *__pyx_n_s_Node_List;
static PyObject *__pyx_n_s_Node_List___reduce_cython;
static PyObject *__pyx_n_s_Node_List___setstate_cython;
static PyObject *__pyx_n_s_Node___reduce_cython;
static PyObject *__pyx_n_s_Node___setstate_cython;
static PyObject *__pyx_kp_u_Not_all_prediction_requests_were;
static PyObject *__pyx_n_s_OnlineDefinitionsReader;
static PyObject *__pyx_n_s_OnlineDefinitionsReader___reduce;
static PyObject *__pyx_n_s_OnlineDefinitionsReader___setsta;
static PyObject *__pyx_n_s_OnlineDefinitionsReader_clustere;
static PyObject *__pyx_n_s_OnlineDefinitionsReader_definiti;
static PyObject *__pyx_n_s_OnlineDefinitionsReader_local_to;
static PyObject *__pyx_kp_u_Options_across_files_True_and_sp;
static PyObject *__pyx_n_s_Original;
static PyObject *__pyx_kp_u_Out_of_bounds;
static PyObject *__pyx_n_s_Outcome;
static PyObject *__pyx_n_s_Outcome_List;
static PyObject *__pyx_n_s_Outcome_List___reduce_cython;
static PyObject *__pyx_n_s_Outcome_List___setstate_cython;
static PyObject *__pyx_n_s_Outcome___reduce_cython;
static PyObject *__pyx_n_s_Outcome___setstate_cython;
static PyObject *__pyx_n_s_PIPE;
static PyObject *__pyx_n_s_Path;
static PyObject *__pyx_kp_u_Path_2;
static PyObject *__pyx_n_s_PredictionProtocol;
static PyObject *__pyx_n_s_Projection;
static PyObject *__pyx_n_s_ProofState;
static PyObject *__pyx_n_s_ProofStateId;
static PyObject *__pyx_n_s_ProofState_List;
static PyObject *__pyx_n_s_ProofState_List___reduce_cython;
static PyObject *__pyx_n_s_ProofState_List___setstate_cytho;
static PyObject *__pyx_n_s_ProofState___reduce_cython;
static PyObject *__pyx_n_s_ProofState___setstate_cython;
static PyObject *__pyx_n_s_ProofStep;
static PyObject *__pyx_n_s_ProofStep_List;
static PyObject *__pyx_n_s_ProofStep_List___reduce_cython;
static PyObject *__pyx_n_s_ProofStep_List___setstate_cython;
static PyObject *__pyx_n_s_ProofStep___reduce_cython;
static PyObject *__pyx_n_s_ProofStep___setstate_cython;
static PyObject *__pyx_n_s_RLIMIT_NOFILE;
static PyObject *__pyx_n_s_Representative_List;
static PyObject *__pyx_n_s_Representative_List___reduce_cyt;
static PyObject *__pyx_n_s_Representative_List___setstate_c;
static PyObject *__pyx_n_s_Request;
static PyObject *__pyx_n_s_Response;
static PyObject *__pyx_n_s_SIGINT;
static PyObject *__pyx_n_s_SIG_DFL;
static PyObject *__pyx_n_s_Sequence;
static PyObject *__pyx_kp_s_Sequence_ProofStep;
static PyObject *__pyx_kp_u_Servers_response;
static PyObject *__pyx_kp_u_Squashfuse_error;
static PyObject *__pyx_n_s_StopIteration;
static PyObject *__pyx_n_s_Substituted;
static PyObject *__pyx_n_s_T;
static PyObject *__pyx_n_u_T;
static PyObject *__pyx_n_s_TacticId;
static PyObject *__pyx_n_s_TacticPredictionGraph;
static PyObject *__pyx_n_s_TacticPredictionText;
static PyObject *__pyx_n_s_TacticPredictionsGraph;
static PyObject *__pyx_n_s_TacticPredictionsText;
static PyObject *__pyx_n_s_TacticalConstant;
static PyObject *__pyx_n_s_TacticalSectionConstant;
static PyObject *__pyx_kp_u_The_servers_response_to_a;
static PyObject *__pyx_kp_u_There_does_not_appear_to_be_a_da;
static PyObject *__pyx_kp_u_This_library_is_compiled_for_a_d;
static PyObject *__pyx_n_s_TupleLike;
static PyObject *__pyx_n_s_TupleLike___getitem;
static PyObject *__pyx_n_s_TupleLike___init;
static PyObject *__pyx_n_s_TupleLike___len;
static PyObject *__pyx_n_s_TypeAlias;
static PyObject *__pyx_n_s_TypeError;
static PyObject *__pyx_n_s_TypeVar;
static PyObject *__pyx_kp_u_Unable_to_mount_dataset;
static PyObject *__pyx_kp_u_Unable_to_mount_dataset_Executab;
static PyObject *__pyx_kp_u_Unable_to_mount_dataset_Mountpoi;
static PyObject *__pyx_kp_u_Unable_to_mount_dataset_Squashfu;
static PyObject *__pyx_n_s_Union;
static PyObject *__pyx_n_s_Unknown;
static PyObject *__pyx_n_s_Unresolvable;
static PyObject *__pyx_n_s_ValueError;
static PyObject *__pyx_kp_u__10;
static PyObject *__pyx_n_s__134;
static PyObject *__pyx_kp_u__25;
static PyObject *__pyx_n_s__31;
static PyObject *__pyx_n_s__33;
static PyObject *__pyx_kp_u__5;
static PyObject *__pyx_kp_u__6;
static PyObject *__pyx_kp_u__8;
static PyObject *__pyx_n_s_a;
static PyObject *__pyx_n_s_access;
static PyObject *__pyx_n_s_across_files;
static PyObject *__pyx_n_s_add;
static PyObject *__pyx_n_s_alignment;
static PyObject *__pyx_n_s_annotations;
static PyObject *__pyx_n_s_apic;
static PyObject *__pyx_n_s_args;
static PyObject *__pyx_n_s_arguments;
static PyObject *__pyx_n_u_arguments;
static PyObject *__pyx_n_s_as_builder;
static PyObject *__pyx_n_s_asyncio_coroutines;
static PyObject *__pyx_n_s_base;
static PyObject *__pyx_kp_u_bin;
static PyObject *__pyx_n_s_bool;
static PyObject *__pyx_kp_u_but_file;
static PyObject *__pyx_kp_u_but_file_Coq_sent_a_message_ver;
static PyObject *__pyx_n_s_c;
static PyObject *__pyx_n_s_cache;
static PyObject *__pyx_n_s_capnp;
static PyObject *__pyx_n_s_capnp_message_generator;
static PyObject *__pyx_n_s_capnp_message_generator_from_fil;
static PyObject *__pyx_n_s_capnp_message_generator_from_fil_2;
static PyObject *__pyx_n_s_capnp_message_generator_lowlevel;
static PyObject *__pyx_n_s_capnp_message_generator_lowlevel_2;
static PyObject *__pyx_n_s_cast;
static PyObject *__pyx_n_s_check;
static PyObject *__pyx_n_s_child;
static PyObject *__pyx_n_s_child_graph;
static PyObject *__pyx_n_s_children;
static PyObject *__pyx_n_s_children_index;
static PyObject *__pyx_n_s_children_limit;
static PyObject *__pyx_n_s_class_getitem;
static PyObject *__pyx_n_s_clear_write_flag;
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_cluster;
static PyObject *__pyx_n_s_cluster_representative;
static PyObject *__pyx_n_s_clustered_definitions;
static PyObject *__pyx_n_s_clustered_global_context;
static PyObject *__pyx_n_s_collections_abc;
static PyObject *__pyx_n_s_confidence;
static PyObject *__pyx_n_u_confidence;
static PyObject *__pyx_kp_u_contains_data_versioned_as;
static PyObject *__pyx_n_s_context;
static PyObject *__pyx_n_s_contextlib;
static PyObject *__pyx_n_s_contextmanager;
static PyObject *__pyx_n_s_convert_predictions;
static PyObject *__pyx_n_s_count;
static PyObject *__pyx_n_s_count_2;
static PyObject *__pyx_n_s_create_mmap;
static PyObject *__pyx_n_s_currentVersion;
static PyObject *__pyx_n_s_current_node;
static PyObject *__pyx_n_s_current_thread;
static PyObject *__pyx_n_s_cython_msg;
static PyObject *__pyx_n_s_d;
static PyObject *__pyx_n_s_data_reader;
static PyObject *__pyx_n_s_data_version;
static PyObject *__pyx_n_s_dataclass;
static PyObject *__pyx_n_s_dataclasses;
static PyObject *__pyx_n_s_dataset;
static PyObject *__pyx_n_s_dataset_path;
static PyObject *__pyx_n_s_decode;
static PyObject *__pyx_n_s_definition;
static PyObject *__pyx_n_s_definition_dependencies;
static PyObject *__pyx_n_s_definitions;
static PyObject *__pyx_n_s_definitions_it;
static PyObject *__pyx_n_s_defs;
static PyObject *__pyx_n_u_depIndex;
static PyObject *__pyx_n_s_dep_index;
static PyObject *__pyx_n_s_dependencies;
static PyObject *__pyx_n_s_deps;
static PyObject *__pyx_n_s_dict;
static PyObject *__pyx_kp_s_dict_Path_Dataset;
static PyObject *__pyx_kp_u_disable;
static PyObject *__pyx_n_s_doc;
static PyObject *__pyx_kp_u_doesn_t_appear_to_be_the_root_o;
static PyObject *__pyx_n_s_dr;
static PyObject *__pyx_n_s_edge_target;
static PyObject *__pyx_n_s_edges;
static PyObject *__pyx_n_s_empty_online_definitions_initial;
static PyObject *__pyx_kp_u_enable;
static PyObject *__pyx_n_s_enter;
static PyObject *__pyx_n_s_enter_context;
static PyObject *__pyx_n_s_enumerate;
static PyObject *__pyx_n_s_ep;
static PyObject *__pyx_n_s_eprev;
static PyObject *__pyx_n_s_exists;
static PyObject *__pyx_n_s_exit;
static PyObject *__pyx_n_s_external_previous;
static PyObject *__pyx_n_s_f;
static PyObject *__pyx_n_s_file_dataset_reader;
static PyObject *__pyx_n_s_file_dataset_reader_locals_creat;
static PyObject *__pyx_n_s_fileno;
static PyObject *__pyx_n_s_float;
static PyObject *__pyx_n_s_fname;
static PyObject *__pyx_n_s_fnames;
static PyObject *__pyx_n_s_from_bytes;
static PyObject *__pyx_n_s_full;
static PyObject *__pyx_n_s_g;
static PyObject *__pyx_kp_u_gc;
static PyObject *__pyx_n_s_get;
static PyObject *__pyx_n_s_get_2;
static PyObject *__pyx_n_s_getitem;
static PyObject *__pyx_n_s_getrlimit;
static PyObject *__pyx_n_s_getstate;
static PyObject *__pyx_n_s_glob;
static PyObject *__pyx_n_s_global_context;
static PyObject *__pyx_n_s_global_context_2;
static PyObject *__pyx_n_s_global_context_set;
static PyObject *__pyx_n_s_global_context_set_2;
static PyObject *__pyx_n_s_graph;
static PyObject *__pyx_n_s_graph_api_capnp;
static PyObject *__pyx_n_s_graph_api_capnp_cython;
static PyObject *__pyx_n_s_graph_index;
static PyObject *__pyx_n_s_graphid;
static PyObject *__pyx_n_s_group_by_clusters;
static PyObject *__pyx_n_s_hard;
static PyObject *__pyx_n_s_ident;
static PyObject *__pyx_n_u_ident;
static PyObject *__pyx_n_s_immutables;
static PyObject *__pyx_n_s_import;
static PyObject *__pyx_n_s_inclusive;
static PyObject *__pyx_n_s_index;
static PyObject *__pyx_n_s_index_getter;
static PyObject *__pyx_n_s_index_getter_2;
static PyObject *__pyx_n_s_init;
static PyObject *__pyx_n_s_init_2;
static PyObject *__pyx_n_s_init_subclass;
static PyObject *__pyx_n_s_initialize;
static PyObject *__pyx_n_s_initialized;
static PyObject *__pyx_n_s_initializing;
static PyObject *__pyx_n_s_int;
static PyObject *__pyx_n_s_is_check_alignment;
static PyObject *__pyx_n_s_is_coroutine;
static PyObject *__pyx_n_s_is_dir;
static PyObject *__pyx_n_s_is_file;
static PyObject *__pyx_n_s_is_initialize;
static PyObject *__pyx_n_s_is_mount;
static PyObject *__pyx_n_s_is_predict;
static PyObject *__pyx_n_s_is_synchronize;
static PyObject *__pyx_kp_u_isenabled;
static PyObject *__pyx_n_s_items;
static PyObject *__pyx_n_s_itertools;
static PyObject *__pyx_n_s_kind;
static PyObject *__pyx_n_s_len;
static PyObject *__pyx_n_s_length;
static PyObject *__pyx_n_s_lgenerator;
static PyObject *__pyx_kp_s_list_Definition;
static PyObject *__pyx_kp_s_list_Node;
static PyObject *__pyx_kp_s_list_TacticPredictionsGraph;
static PyObject *__pyx_kp_s_list_TacticPredictionsText;
static PyObject *__pyx_kp_s_list_int;
static PyObject *__pyx_n_s_local_to_global;
static PyObject *__pyx_n_s_log_annotation;
static PyObject *__pyx_n_s_lowlevel;
static PyObject *__pyx_n_s_lowlevel_data_reader;
static PyObject *__pyx_n_s_lowlevel_to_highlevel;
static PyObject *__pyx_n_s_lreader;
static PyObject *__pyx_n_s_main;
static PyObject *__pyx_n_s_main_thread;
static PyObject *__pyx_n_s_major;
static PyObject *__pyx_n_s_memoryview;
static PyObject *__pyx_n_s_message_file;
static PyObject *__pyx_n_s_message_reader;
static PyObject *__pyx_kp_u_message_was_equal_to_the_record;
static PyObject *__pyx_kp_u_message_was_not_equal_to_the;
static PyObject *__pyx_n_s_metaclass;
static PyObject *__pyx_n_s_mm;
static PyObject *__pyx_n_s_mmap;
static PyObject *__pyx_n_s_module;
static PyObject *__pyx_n_s_mountpoint;
static PyObject *__pyx_n_s_msg;
static PyObject *__pyx_n_s_mv;
static PyObject *__pyx_n_s_n;
static PyObject *__pyx_n_s_name;
static PyObject *__pyx_n_s_name_2;
static PyObject *__pyx_n_s_new_context;
static PyObject *__pyx_n_s_new_message;
static PyObject *__pyx_n_s_new_set;
static PyObject *__pyx_n_s_new_soft;
static PyObject *__pyx_n_s_next_disabled_sigint;
static PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
static PyObject *__pyx_kp_u_node;
static PyObject *__pyx_n_u_nodeIndex;
static PyObject *__pyx_n_s_node_2;
static PyObject *__pyx_n_s_node_by_id;
static PyObject *__pyx_n_s_node_contents;
static PyObject *__pyx_n_s_node_dependencies;
static PyObject *__pyx_n_s_node_hash;
static PyObject *__pyx_n_s_node_label;
static PyObject *__pyx_n_s_nodeid;
static PyObject *__pyx_n_s_nodes;
static PyObject *__pyx_n_s_online_data_predict;
static PyObject *__pyx_n_s_online_definitions_initialize;
static PyObject *__pyx_n_s_open;
static PyObject *__pyx_n_s_original;
static PyObject *__pyx_n_s_p;
static PyObject *__pyx_n_s_parent;
static PyObject *__pyx_n_s_parts;
static PyObject *__pyx_n_s_pathlib;
static PyObject *__pyx_n_s_pg;
static PyObject *__pyx_n_s_pred;
static PyObject *__pyx_n_s_predict;
static PyObject *__pyx_n_s_prediction;
static PyObject *__pyx_n_s_prediction_generator;
static PyObject *__pyx_n_s_prediction_generator_locals_pred;
static PyObject *__pyx_n_s_prediction_generator_sub;
static PyObject *__pyx_n_s_prediction_requests;
static PyObject *__pyx_n_s_predictions;
static PyObject *__pyx_n_s_preds;
static PyObject *__pyx_n_s_prepare;
static PyObject *__pyx_n_s_prev;
static PyObject *__pyx_n_s_prev_sig;
static PyObject *__pyx_n_s_previous;
static PyObject *__pyx_n_s_print;
static PyObject *__pyx_n_s_proof;
static PyObject *__pyx_n_s_proof_state;
static PyObject *__pyx_n_s_propagate;
static PyObject *__pyx_n_s_propagate_2;
static PyObject *__pyx_n_s_pytact;
static PyObject *__pyx_n_s_pytact_data_reader;
static PyObject *__pyx_kp_s_pytact_data_reader_pyx;
static PyObject *__pyx_n_s_pytact_graph_api_capnp;
static PyObject *__pyx_n_s_pytact_graph_api_capnp_cython;
static PyObject *__pyx_kp_s_pytact_graph_api_capnp_cython_Ab;
static PyObject *__pyx_n_s_pyx_state;
static PyObject *__pyx_n_s_pyx_vtable;
static PyObject *__pyx_n_s_qualname;
static PyObject *__pyx_n_s_range;
static PyObject *__pyx_n_u_rb;
static PyObject *__pyx_n_s_read_multiple_packed;
static PyObject *__pyx_n_s_reader;
static PyObject *__pyx_n_s_record;
static PyObject *__pyx_n_s_recorded_response;
static PyObject *__pyx_kp_u_recorded_response_Recorded_respo;
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_relative_to;
static PyObject *__pyx_n_s_rep;
static PyObject *__pyx_n_s_representative;
static PyObject *__pyx_n_s_representatives;
static PyObject *__pyx_n_s_request;
static PyObject *__pyx_n_s_resource;
static PyObject *__pyx_n_s_response;
static PyObject *__pyx_n_s_result;
static PyObject *__pyx_n_s_return;
static PyObject *__pyx_n_s_returncode;
static PyObject *__pyx_n_s_reversed;
static PyObject *__pyx_n_s_run;
static PyObject *__pyx_n_s_schema;
static PyObject *__pyx_n_s_seen;
static PyObject *__pyx_n_s_self;
static PyObject *__pyx_kp_s_self_edges_self_graph_index_cann;
static PyObject *__pyx_kp_s_self_graph_index_cannot_be_conve;
static PyObject *__pyx_kp_s_self_graph_index_self_node_canno;
static PyObject *__pyx_kp_s_self_graph_index_self_reader_can;
static PyObject *__pyx_n_s_send;
static PyObject *__pyx_n_s_set;
static PyObject *__pyx_kp_s_set_Definition;
static PyObject *__pyx_kp_s_set_Definition_None;
static PyObject *__pyx_kp_s_set_Node;
static PyObject *__pyx_n_s_set_name;
static PyObject *__pyx_n_s_setrlimit;
static PyObject *__pyx_n_s_setstate;
static PyObject *__pyx_n_s_setstate_cython;
static PyObject *__pyx_n_s_setup_dataset;
static PyObject *__pyx_n_s_should_propagate;
static PyObject *__pyx_n_s_shutil;
static PyObject *__pyx_n_s_signal;
static PyObject *__pyx_n_s_size;
static PyObject *__pyx_n_s_sleep;
static PyObject *__pyx_n_s_socket;
static PyObject *__pyx_kp_s_socket_socket;
static PyObject *__pyx_n_s_soft;
static PyObject *__pyx_n_s_spec;
static PyObject *__pyx_n_s_spine_only;
static PyObject *__pyx_n_u_squashfuse;
static PyObject *__pyx_n_s_stack;
static PyObject *__pyx_n_s_stack_size;
static PyObject *__pyx_n_s_start;
static PyObject *__pyx_n_s_staticmethod;
static PyObject *__pyx_n_s_stderr;
static PyObject *__pyx_n_s_stdout;
static PyObject *__pyx_n_s_str;
static PyObject *__pyx_kp_s_stringsource;
static PyObject *__pyx_n_s_sub_context;
static PyObject *__pyx_n_s_subprocess;
static PyObject *__pyx_kp_u_suggests_that_the_real_root_mig;
static PyObject *__pyx_n_s_super;
static PyObject *__pyx_n_s_synchronize;
static PyObject *__pyx_n_s_synchronized;
static PyObject *__pyx_n_s_tactic;
static PyObject *__pyx_n_u_tactic;
static PyObject *__pyx_n_u_tacticText;
static PyObject *__pyx_n_s_tactic_text;
static PyObject *__pyx_n_s_tactics;
static PyObject *__pyx_n_s_temp;
static PyObject *__pyx_n_u_term;
static PyObject *__pyx_n_s_test;
static PyObject *__pyx_n_s_text;
static PyObject *__pyx_n_s_textPrediction;
static PyObject *__pyx_n_s_threading;
static PyObject *__pyx_n_s_throw;
static PyObject *__pyx_n_s_time;
static PyObject *__pyx_n_s_to_dict;
static PyObject *__pyx_n_s_traversal_limit_in_words;
static PyObject *__pyx_n_s_typing;
static PyObject *__pyx_n_u_unalignedDefinitions;
static PyObject *__pyx_n_u_unalignedTactics;
static PyObject *__pyx_n_s_unknown_definitions;
static PyObject *__pyx_n_s_unknown_tactics;
static PyObject *__pyx_n_s_update;
static PyObject *__pyx_n_s_which;
static PyObject *__pyx_n_s_with_suffix;
static PyObject *__pyx_n_s_write_packed;
#endif
/* #### Code section: decls ### */
static PyObject *__pyx_pf_6pytact_11data_reader_9TupleLike___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_count, PyObject *__pyx_v_index_getter); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9TupleLike_2__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9TupleLike_4__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_file_dataset_reader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_19file_dataset_reader_create_mmap(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname); /* proto */
static int __pyx_pf_6pytact_11data_reader_18LowlevelDataReader___cinit__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, PyObject *__pyx_v_dataset_path, PyObject *__pyx_v_dataset); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_2local_to_global(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, PyObject *__pyx_v_graph, PyObject *__pyx_v_dep_index); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_4__getitem__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, PyObject *__pyx_v_graph); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_6__len__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_19graphid_by_filename___get__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_11graph_files___get__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_3setup_dataset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dataset_path); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_5lowlevel_data_reader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dataset_path); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node___repr__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_2__eq__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_other); /* proto */
static Py_hash_t __pyx_pf_6pytact_11data_reader_4Node_4__hash__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_5label___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_8identity___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_8children___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_10definition___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_5graph___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_6nodeid___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_4Node_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_15EdgeTarget_List___getitem__(struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_15EdgeTarget_List_2__len__(struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_15EdgeTarget_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_15EdgeTarget_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9Node_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_9Node_List_2__len__(struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9Node_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9Node_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState___repr__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_4root___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_7context___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_13context_names___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_12context_text___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_15conclusion_text___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_4text___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_2__str__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_2id___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_15ProofState_List___getitem__(struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_15ProofState_List_2__len__(struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_15ProofState_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_15ProofState_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_13Argument_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_13Argument_List_2__len__(struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_13Argument_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_13Argument_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome___repr__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_6before___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_5after___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_4term___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_9term_text___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_16tactic_arguments___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_6tactic___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_12Outcome_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_12Outcome_List_2__len__(struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_12Outcome_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_12Outcome_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep___repr__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_6tactic___get__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_8outcomes___get__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_14ProofStep_List___getitem__(struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_14ProofStep_List_2__len__(struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_14ProofStep_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_14ProofStep_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_19Representative_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_19Representative_List_2__len__(struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_19Representative_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_19Representative_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition___repr__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_2__eq__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_other); /* proto */
static Py_hash_t __pyx_pf_6pytact_11data_reader_10Definition_4__hash__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_4name___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_8previous___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_17external_previous___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_6_global_context(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_inclusive, PyObject *__pyx_v_seen); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_9global_context(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_inclusive); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_11clustered_global_context(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_inclusive); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_6status___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_4kind___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_5proof___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_22cluster_representative___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_7cluster___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_9type_text___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_9term_text___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_22is_file_representative___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_13_group_by_clusters(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_definitions); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_4node___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_16__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_18__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23Dataset_Definition_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index); /* proto */
static Py_ssize_t __pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_2__len__(struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset___repr__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_12dependencies_7__get___get(PyObject *__pyx_self, PyObject *__pyx_v_index); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_12dependencies___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_14representative___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_2definitions(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_spine_only); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_4clustered_definitions(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_spine_only); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_11module_name___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static struct __pyx_obj_6pytact_11data_reader_Node *__pyx_pf_6pytact_11data_reader_7Dataset_6node_by_id(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, __pyx_t_6pytact_11data_reader_NodeId __pyx_v_nodeid); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_5graph___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_8filename___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_8lowlevel_to_highlevel(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_lreader); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_10data_reader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dataset_path); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_local_to_global(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, PyObject *__pyx_v_graph, PyObject *__pyx_v_dep_index); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_14representative___get__(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_2definitions(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, PyObject *__pyx_v_full); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_4clustered_definitions(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, PyObject *__pyx_v_full); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_13online_definitions_initialize(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_stack, struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader *__pyx_v_init); /* proto */
static struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_pf_6pytact_11data_reader_16empty_online_definitions_initialize(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_18online_data_predict(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_base, struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader *__pyx_v_predict); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_21convert_predictions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_preds, PyObject *__pyx_v_stack_size); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_23capnp_message_generator_lowlevel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_socket, PyObject *__pyx_v_record); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_32capnp_message_generator_lowlevel_next_disabled_sigint(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_26capnp_message_generator_from_file_lowlevel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message_file, PyObject *__pyx_v_check); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_29prediction_generator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lgenerator, struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_defs); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_20prediction_generator_prediction_generator_sub(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_32capnp_message_generator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_socket, PyObject *__pyx_v_record); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_34capnp_message_generator_from_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message_file, PyObject *__pyx_v_check); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_cache, PyObject *__pyx_v_parent, PyObject *__pyx_v_should_propagate); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_2_propagate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d, PyObject *__pyx_v_context); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_4_global_context_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_6global_context_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_8sub_context(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_propagate); /* proto */
static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v__); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_11new_context(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_36node_dependencies(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_n, PyObject *__pyx_v_deps); /* proto */
static PyObject *__pyx_pf_6pytact_11data_reader_38definition_dependencies(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d); /* proto */
static PyObject *__pyx_tp_new_6pytact_11data_reader_LowlevelDataReader(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Node(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_EdgeTarget_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Node_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofState(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofState_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Argument_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Outcome(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Outcome_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofStep(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofStep_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Representative_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Definition(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Dataset_Definition_List(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_Dataset(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader_OnlineDefinitionsReader(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_2__global_context(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_3___get__(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_5___get__(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_6_data_reader(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_13_sub_context(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_14_new_context(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_float_0_01;
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_1;
static PyObject *__pyx_int_18446744073709551615;
#endif
#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_codeobj_;
static PyObject *__pyx_tuple__2;
static PyObject *__pyx_tuple__3;
static PyObject *__pyx_tuple__7;
static PyObject *__pyx_tuple__11;
static PyObject *__pyx_tuple__14;
static PyObject *__pyx_tuple__16;
static PyObject *__pyx_tuple__20;
static PyObject *__pyx_tuple__22;
static PyObject *__pyx_tuple__28;
static PyObject *__pyx_tuple__29;
static PyObject *__pyx_tuple__34;
static PyObject *__pyx_tuple__35;
static PyObject *__pyx_tuple__36;
static PyObject *__pyx_tuple__37;
static PyObject *__pyx_tuple__39;
static PyObject *__pyx_tuple__41;
static PyObject *__pyx_tuple__43;
static PyObject *__pyx_tuple__44;
static PyObject *__pyx_tuple__47;
static PyObject *__pyx_tuple__49;
static PyObject *__pyx_tuple__51;
static PyObject *__pyx_tuple__74;
static PyObject *__pyx_tuple__75;
static PyObject *__pyx_tuple__77;
static PyObject *__pyx_tuple__79;
static PyObject *__pyx_tuple__84;
static PyObject *__pyx_tuple__86;
static PyObject *__pyx_tuple__88;
static PyObject *__pyx_tuple__92;
static PyObject *__pyx_tuple__94;
static PyObject *__pyx_tuple__96;
static PyObject *__pyx_tuple__98;
static PyObject *__pyx_tuple__99;
static PyObject *__pyx_codeobj__4;
static PyObject *__pyx_codeobj__9;
static PyObject *__pyx_tuple__103;
static PyObject *__pyx_tuple__104;
static PyObject *__pyx_tuple__106;
static PyObject *__pyx_tuple__107;
static PyObject *__pyx_tuple__109;
static PyObject *__pyx_tuple__110;
static PyObject *__pyx_tuple__111;
static PyObject *__pyx_tuple__112;
static PyObject *__pyx_tuple__113;
static PyObject *__pyx_tuple__114;
static PyObject *__pyx_tuple__116;
static PyObject *__pyx_tuple__117;
static PyObject *__pyx_tuple__119;
static PyObject *__pyx_tuple__120;
static PyObject *__pyx_tuple__122;
static PyObject *__pyx_tuple__124;
static PyObject *__pyx_tuple__126;
static PyObject *__pyx_tuple__128;
static PyObject *__pyx_tuple__129;
static PyObject *__pyx_tuple__131;
static PyObject *__pyx_tuple__132;
static PyObject *__pyx_codeobj__12;
static PyObject *__pyx_codeobj__13;
static PyObject *__pyx_codeobj__15;
static PyObject *__pyx_codeobj__17;
static PyObject *__pyx_codeobj__18;
static PyObject *__pyx_codeobj__19;
static PyObject *__pyx_codeobj__21;
static PyObject *__pyx_codeobj__23;
static PyObject *__pyx_codeobj__24;
static PyObject *__pyx_codeobj__26;
static PyObject *__pyx_codeobj__27;
static PyObject *__pyx_codeobj__30;
static PyObject *__pyx_codeobj__32;
static PyObject *__pyx_codeobj__38;
static PyObject *__pyx_codeobj__40;
static PyObject *__pyx_codeobj__42;
static PyObject *__pyx_codeobj__45;
static PyObject *__pyx_codeobj__46;
static PyObject *__pyx_codeobj__48;
static PyObject *__pyx_codeobj__50;
static PyObject *__pyx_codeobj__52;
static PyObject *__pyx_codeobj__53;
static PyObject *__pyx_codeobj__54;
static PyObject *__pyx_codeobj__55;
static PyObject *__pyx_codeobj__56;
static PyObject *__pyx_codeobj__57;
static PyObject *__pyx_codeobj__58;
static PyObject *__pyx_codeobj__59;
static PyObject *__pyx_codeobj__60;
static PyObject *__pyx_codeobj__61;
static PyObject *__pyx_codeobj__62;
static PyObject *__pyx_codeobj__63;
static PyObject *__pyx_codeobj__64;
static PyObject *__pyx_codeobj__65;
static PyObject *__pyx_codeobj__66;
static PyObject *__pyx_codeobj__67;
static PyObject *__pyx_codeobj__68;
static PyObject *__pyx_codeobj__69;
static PyObject *__pyx_codeobj__70;
static PyObject *__pyx_codeobj__71;
static PyObject *__pyx_codeobj__72;
static PyObject *__pyx_codeobj__73;
static PyObject *__pyx_codeobj__76;
static PyObject *__pyx_codeobj__78;
static PyObject *__pyx_codeobj__80;
static PyObject *__pyx_codeobj__81;
static PyObject *__pyx_codeobj__82;
static PyObject *__pyx_codeobj__83;
static PyObject *__pyx_codeobj__85;
static PyObject *__pyx_codeobj__87;
static PyObject *__pyx_codeobj__89;
static PyObject *__pyx_codeobj__90;
static PyObject *__pyx_codeobj__91;
static PyObject *__pyx_codeobj__93;
static PyObject *__pyx_codeobj__95;
static PyObject *__pyx_codeobj__97;
static PyObject *__pyx_codeobj__100;
static PyObject *__pyx_codeobj__101;
static PyObject *__pyx_codeobj__102;
static PyObject *__pyx_codeobj__105;
static PyObject *__pyx_codeobj__108;
static PyObject *__pyx_codeobj__115;
static PyObject *__pyx_codeobj__118;
static PyObject *__pyx_codeobj__121;
static PyObject *__pyx_codeobj__123;
static PyObject *__pyx_codeobj__125;
static PyObject *__pyx_codeobj__127;
static PyObject *__pyx_codeobj__130;
static PyObject *__pyx_codeobj__133;
#endif
/* #### Code section: late_includes ### */
/* #### Code section: module_state ### */
#if CYTHON_USE_MODULE_STATE
typedef struct {
  PyObject *__pyx_d;
  PyObject *__pyx_b;
  PyObject *__pyx_cython_runtime;
  PyObject *__pyx_empty_tuple;
  PyObject *__pyx_empty_bytes;
  PyObject *__pyx_empty_unicode;
  #ifdef __Pyx_CyFunction_USED
  PyTypeObject *__pyx_CyFunctionType;
  #endif
  #ifdef __Pyx_FusedFunction_USED
  PyTypeObject *__pyx_FusedFunctionType;
  #endif
  PyTypeObject *__pyx_ptype_7cpython_4type_type;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__StructSchemaField;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp_SchemaParser;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__Schema;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicEnum;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder;
  PyTypeObject *__pyx_ptype_5capnp_3lib_5capnp__MessageBuilder;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_String_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_LowlevelDataReader;
  PyObject *__pyx_type_6pytact_11data_reader_LowlevelDataReader;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Node;
  PyObject *__pyx_type_6pytact_11data_reader_Node;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_EdgeTarget_List;
  PyObject *__pyx_type_6pytact_11data_reader_EdgeTarget_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Node_List;
  PyObject *__pyx_type_6pytact_11data_reader_Node_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofState;
  PyObject *__pyx_type_6pytact_11data_reader_ProofState;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofState_List;
  PyObject *__pyx_type_6pytact_11data_reader_ProofState_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Argument_List;
  PyObject *__pyx_type_6pytact_11data_reader_Argument_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Outcome;
  PyObject *__pyx_type_6pytact_11data_reader_Outcome;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Outcome_List;
  PyObject *__pyx_type_6pytact_11data_reader_Outcome_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofStep;
  PyObject *__pyx_type_6pytact_11data_reader_ProofStep;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_ProofStep_List;
  PyObject *__pyx_type_6pytact_11data_reader_ProofStep_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Representative_List;
  PyObject *__pyx_type_6pytact_11data_reader_Representative_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Definition;
  PyObject *__pyx_type_6pytact_11data_reader_Definition;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List;
  PyObject *__pyx_type_6pytact_11data_reader_Dataset_Definition_List;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_Dataset;
  PyObject *__pyx_type_6pytact_11data_reader_Dataset;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader;
  PyObject *__pyx_type_6pytact_11data_reader_OnlineDefinitionsReader;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get__;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get__;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context;
  PyTypeObject *__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context;
  PyObject *__pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context;
  PyObject *__pyx_n_s_ACCESS_READ;
  PyObject *__pyx_n_s_Any;
  PyObject *__pyx_n_s_Argument_List;
  PyObject *__pyx_n_s_Argument_List___reduce_cython;
  PyObject *__pyx_n_s_Argument_List___setstate_cython;
  PyObject *__pyx_n_s_AssertionError;
  PyObject *__pyx_n_s_BinaryIO;
  PyObject *__pyx_kp_s_BinaryIO_None;
  PyObject *__pyx_n_s_Callable;
  PyObject *__pyx_kp_s_Callable_Definition_bool;
  PyObject *__pyx_kp_s_Callable_int_T;
  PyObject *__pyx_kp_u_Capnp_protocol_error;
  PyObject *__pyx_n_s_CheckAlignmentMessage;
  PyObject *__pyx_n_s_CheckAlignmentResponse;
  PyObject *__pyx_n_s_Constructor;
  PyObject *__pyx_n_s_Dataset;
  PyObject *__pyx_n_s_Dataset_Definition_List;
  PyObject *__pyx_n_s_Dataset_Definition_List___reduce;
  PyObject *__pyx_n_s_Dataset_Definition_List___setsta;
  PyObject *__pyx_n_s_Dataset_Reader;
  PyObject *__pyx_n_s_Dataset___get___locals_get;
  PyObject *__pyx_n_s_Dataset___reduce_cython;
  PyObject *__pyx_n_s_Dataset___setstate_cython;
  PyObject *__pyx_n_s_Dataset_clustered_definitions;
  PyObject *__pyx_n_s_Dataset_definitions;
  PyObject *__pyx_kp_u_Dataset_does_not_exist;
  PyObject *__pyx_n_s_Dataset_node_by_id;
  PyObject *__pyx_n_s_Definition;
  PyObject *__pyx_n_s_Definition___get;
  PyObject *__pyx_n_s_Definition___reduce_cython;
  PyObject *__pyx_n_s_Definition___setstate_cython;
  PyObject *__pyx_n_s_Definition__global_context;
  PyObject *__pyx_n_s_Definition__group_by_clusters;
  PyObject *__pyx_n_s_Definition_clustered_global_cont;
  PyObject *__pyx_n_s_Definition_global_context;
  PyObject *__pyx_n_s_Discharged;
  PyObject *__pyx_n_s_EdgeTarget_List;
  PyObject *__pyx_n_s_EdgeTarget_List___reduce_cython;
  PyObject *__pyx_n_s_EdgeTarget_List___setstate_cytho;
  PyObject *__pyx_n_s_ExitStack;
  PyObject *__pyx_n_s_Generator;
  PyObject *__pyx_kp_s_Generator_Any_None_None;
  PyObject *__pyx_kp_s_Generator_GlobalContextMessage_P;
  PyObject *__pyx_kp_s_Generator_GlobalContextSets_None;
  PyObject *__pyx_kp_s_Generator_LowlevelDataReader_Non;
  PyObject *__pyx_kp_s_Generator_OnlineDefinitionsReade;
  PyObject *__pyx_kp_s_Generator_ProofState_None_None;
  PyObject *__pyx_kp_s_Generator_dict_Path_Dataset_None;
  PyObject *__pyx_kp_s_Generator_pytact_graph_api_capnp;
  PyObject *__pyx_n_s_GlobalContextMessage;
  PyObject *__pyx_n_s_GlobalContextSets;
  PyObject *__pyx_kp_s_GlobalContextSets_None;
  PyObject *__pyx_n_s_GlobalContextSets___init;
  PyObject *__pyx_n_s_GlobalContextSets__global_contex;
  PyObject *__pyx_n_s_GlobalContextSets__propagate;
  PyObject *__pyx_n_s_GlobalContextSets_global_context;
  PyObject *__pyx_n_s_GlobalContextSets_new_context;
  PyObject *__pyx_n_s_GlobalContextSets_new_context_lo;
  PyObject *__pyx_n_s_GlobalContextSets_sub_context;
  PyObject *__pyx_kp_u_Incorrect_predictions_received;
  PyObject *__pyx_n_s_IndexError;
  PyObject *__pyx_n_s_Inductive;
  PyObject *__pyx_n_s_Iterable;
  PyObject *__pyx_kp_s_Iterable_Definition;
  PyObject *__pyx_kp_s_Iterable_list_Definition;
  PyObject *__pyx_n_s_KeyError;
  PyObject *__pyx_kp_s_Lazily_retrieve_a_the_global_con;
  PyObject *__pyx_n_s_LowlevelDataReader;
  PyObject *__pyx_n_s_LowlevelDataReader___reduce_cyth;
  PyObject *__pyx_n_s_LowlevelDataReader___setstate_cy;
  PyObject *__pyx_n_s_LowlevelDataReader_local_to_glob;
  PyObject *__pyx_n_s_ManualConstant;
  PyObject *__pyx_n_s_ManualSectionConstant;
  PyObject *__pyx_n_s_Map;
  PyObject *__pyx_n_s_MemoryError;
  PyObject *__pyx_kp_u_Mount_did_not_appear;
  PyObject *__pyx_n_s_Node;
  PyObject *__pyx_n_s_NodeHash;
  PyObject *__pyx_n_s_NodeId;
  PyObject *__pyx_n_s_Node_List;
  PyObject *__pyx_n_s_Node_List___reduce_cython;
  PyObject *__pyx_n_s_Node_List___setstate_cython;
  PyObject *__pyx_n_s_Node___reduce_cython;
  PyObject *__pyx_n_s_Node___setstate_cython;
  PyObject *__pyx_kp_u_Not_all_prediction_requests_were;
  PyObject *__pyx_n_s_OnlineDefinitionsReader;
  PyObject *__pyx_n_s_OnlineDefinitionsReader___reduce;
  PyObject *__pyx_n_s_OnlineDefinitionsReader___setsta;
  PyObject *__pyx_n_s_OnlineDefinitionsReader_clustere;
  PyObject *__pyx_n_s_OnlineDefinitionsReader_definiti;
  PyObject *__pyx_n_s_OnlineDefinitionsReader_local_to;
  PyObject *__pyx_kp_u_Options_across_files_True_and_sp;
  PyObject *__pyx_n_s_Original;
  PyObject *__pyx_kp_u_Out_of_bounds;
  PyObject *__pyx_n_s_Outcome;
  PyObject *__pyx_n_s_Outcome_List;
  PyObject *__pyx_n_s_Outcome_List___reduce_cython;
  PyObject *__pyx_n_s_Outcome_List___setstate_cython;
  PyObject *__pyx_n_s_Outcome___reduce_cython;
  PyObject *__pyx_n_s_Outcome___setstate_cython;
  PyObject *__pyx_n_s_PIPE;
  PyObject *__pyx_n_s_Path;
  PyObject *__pyx_kp_u_Path_2;
  PyObject *__pyx_n_s_PredictionProtocol;
  PyObject *__pyx_n_s_Projection;
  PyObject *__pyx_n_s_ProofState;
  PyObject *__pyx_n_s_ProofStateId;
  PyObject *__pyx_n_s_ProofState_List;
  PyObject *__pyx_n_s_ProofState_List___reduce_cython;
  PyObject *__pyx_n_s_ProofState_List___setstate_cytho;
  PyObject *__pyx_n_s_ProofState___reduce_cython;
  PyObject *__pyx_n_s_ProofState___setstate_cython;
  PyObject *__pyx_n_s_ProofStep;
  PyObject *__pyx_n_s_ProofStep_List;
  PyObject *__pyx_n_s_ProofStep_List___reduce_cython;
  PyObject *__pyx_n_s_ProofStep_List___setstate_cython;
  PyObject *__pyx_n_s_ProofStep___reduce_cython;
  PyObject *__pyx_n_s_ProofStep___setstate_cython;
  PyObject *__pyx_n_s_RLIMIT_NOFILE;
  PyObject *__pyx_n_s_Representative_List;
  PyObject *__pyx_n_s_Representative_List___reduce_cyt;
  PyObject *__pyx_n_s_Representative_List___setstate_c;
  PyObject *__pyx_n_s_Request;
  PyObject *__pyx_n_s_Response;
  PyObject *__pyx_n_s_SIGINT;
  PyObject *__pyx_n_s_SIG_DFL;
  PyObject *__pyx_n_s_Sequence;
  PyObject *__pyx_kp_s_Sequence_ProofStep;
  PyObject *__pyx_kp_u_Servers_response;
  PyObject *__pyx_kp_u_Squashfuse_error;
  PyObject *__pyx_n_s_StopIteration;
  PyObject *__pyx_n_s_Substituted;
  PyObject *__pyx_n_s_T;
  PyObject *__pyx_n_u_T;
  PyObject *__pyx_n_s_TacticId;
  PyObject *__pyx_n_s_TacticPredictionGraph;
  PyObject *__pyx_n_s_TacticPredictionText;
  PyObject *__pyx_n_s_TacticPredictionsGraph;
  PyObject *__pyx_n_s_TacticPredictionsText;
  PyObject *__pyx_n_s_TacticalConstant;
  PyObject *__pyx_n_s_TacticalSectionConstant;
  PyObject *__pyx_kp_u_The_servers_response_to_a;
  PyObject *__pyx_kp_u_There_does_not_appear_to_be_a_da;
  PyObject *__pyx_kp_u_This_library_is_compiled_for_a_d;
  PyObject *__pyx_n_s_TupleLike;
  PyObject *__pyx_n_s_TupleLike___getitem;
  PyObject *__pyx_n_s_TupleLike___init;
  PyObject *__pyx_n_s_TupleLike___len;
  PyObject *__pyx_n_s_TypeAlias;
  PyObject *__pyx_n_s_TypeError;
  PyObject *__pyx_n_s_TypeVar;
  PyObject *__pyx_kp_u_Unable_to_mount_dataset;
  PyObject *__pyx_kp_u_Unable_to_mount_dataset_Executab;
  PyObject *__pyx_kp_u_Unable_to_mount_dataset_Mountpoi;
  PyObject *__pyx_kp_u_Unable_to_mount_dataset_Squashfu;
  PyObject *__pyx_n_s_Union;
  PyObject *__pyx_n_s_Unknown;
  PyObject *__pyx_n_s_Unresolvable;
  PyObject *__pyx_n_s_ValueError;
  PyObject *__pyx_kp_u__10;
  PyObject *__pyx_n_s__134;
  PyObject *__pyx_kp_u__25;
  PyObject *__pyx_n_s__31;
  PyObject *__pyx_n_s__33;
  PyObject *__pyx_kp_u__5;
  PyObject *__pyx_kp_u__6;
  PyObject *__pyx_kp_u__8;
  PyObject *__pyx_n_s_a;
  PyObject *__pyx_n_s_access;
  PyObject *__pyx_n_s_across_files;
  PyObject *__pyx_n_s_add;
  PyObject *__pyx_n_s_alignment;
  PyObject *__pyx_n_s_annotations;
  PyObject *__pyx_n_s_apic;
  PyObject *__pyx_n_s_args;
  PyObject *__pyx_n_s_arguments;
  PyObject *__pyx_n_u_arguments;
  PyObject *__pyx_n_s_as_builder;
  PyObject *__pyx_n_s_asyncio_coroutines;
  PyObject *__pyx_n_s_base;
  PyObject *__pyx_kp_u_bin;
  PyObject *__pyx_n_s_bool;
  PyObject *__pyx_kp_u_but_file;
  PyObject *__pyx_kp_u_but_file_Coq_sent_a_message_ver;
  PyObject *__pyx_n_s_c;
  PyObject *__pyx_n_s_cache;
  PyObject *__pyx_n_s_capnp;
  PyObject *__pyx_n_s_capnp_message_generator;
  PyObject *__pyx_n_s_capnp_message_generator_from_fil;
  PyObject *__pyx_n_s_capnp_message_generator_from_fil_2;
  PyObject *__pyx_n_s_capnp_message_generator_lowlevel;
  PyObject *__pyx_n_s_capnp_message_generator_lowlevel_2;
  PyObject *__pyx_n_s_cast;
  PyObject *__pyx_n_s_check;
  PyObject *__pyx_n_s_child;
  PyObject *__pyx_n_s_child_graph;
  PyObject *__pyx_n_s_children;
  PyObject *__pyx_n_s_children_index;
  PyObject *__pyx_n_s_children_limit;
  PyObject *__pyx_n_s_class_getitem;
  PyObject *__pyx_n_s_clear_write_flag;
  PyObject *__pyx_n_s_cline_in_traceback;
  PyObject *__pyx_n_s_close;
  PyObject *__pyx_n_s_cls;
  PyObject *__pyx_n_s_cluster;
  PyObject *__pyx_n_s_cluster_representative;
  PyObject *__pyx_n_s_clustered_definitions;
  PyObject *__pyx_n_s_clustered_global_context;
  PyObject *__pyx_n_s_collections_abc;
  PyObject *__pyx_n_s_confidence;
  PyObject *__pyx_n_u_confidence;
  PyObject *__pyx_kp_u_contains_data_versioned_as;
  PyObject *__pyx_n_s_context;
  PyObject *__pyx_n_s_contextlib;
  PyObject *__pyx_n_s_contextmanager;
  PyObject *__pyx_n_s_convert_predictions;
  PyObject *__pyx_n_s_count;
  PyObject *__pyx_n_s_count_2;
  PyObject *__pyx_n_s_create_mmap;
  PyObject *__pyx_n_s_currentVersion;
  PyObject *__pyx_n_s_current_node;
  PyObject *__pyx_n_s_current_thread;
  PyObject *__pyx_n_s_cython_msg;
  PyObject *__pyx_n_s_d;
  PyObject *__pyx_n_s_data_reader;
  PyObject *__pyx_n_s_data_version;
  PyObject *__pyx_n_s_dataclass;
  PyObject *__pyx_n_s_dataclasses;
  PyObject *__pyx_n_s_dataset;
  PyObject *__pyx_n_s_dataset_path;
  PyObject *__pyx_n_s_decode;
  PyObject *__pyx_n_s_definition;
  PyObject *__pyx_n_s_definition_dependencies;
  PyObject *__pyx_n_s_definitions;
  PyObject *__pyx_n_s_definitions_it;
  PyObject *__pyx_n_s_defs;
  PyObject *__pyx_n_u_depIndex;
  PyObject *__pyx_n_s_dep_index;
  PyObject *__pyx_n_s_dependencies;
  PyObject *__pyx_n_s_deps;
  PyObject *__pyx_n_s_dict;
  PyObject *__pyx_kp_s_dict_Path_Dataset;
  PyObject *__pyx_kp_u_disable;
  PyObject *__pyx_n_s_doc;
  PyObject *__pyx_kp_u_doesn_t_appear_to_be_the_root_o;
  PyObject *__pyx_n_s_dr;
  PyObject *__pyx_n_s_edge_target;
  PyObject *__pyx_n_s_edges;
  PyObject *__pyx_n_s_empty_online_definitions_initial;
  PyObject *__pyx_kp_u_enable;
  PyObject *__pyx_n_s_enter;
  PyObject *__pyx_n_s_enter_context;
  PyObject *__pyx_n_s_enumerate;
  PyObject *__pyx_n_s_ep;
  PyObject *__pyx_n_s_eprev;
  PyObject *__pyx_n_s_exists;
  PyObject *__pyx_n_s_exit;
  PyObject *__pyx_n_s_external_previous;
  PyObject *__pyx_n_s_f;
  PyObject *__pyx_n_s_file_dataset_reader;
  PyObject *__pyx_n_s_file_dataset_reader_locals_creat;
  PyObject *__pyx_n_s_fileno;
  PyObject *__pyx_n_s_float;
  PyObject *__pyx_n_s_fname;
  PyObject *__pyx_n_s_fnames;
  PyObject *__pyx_n_s_from_bytes;
  PyObject *__pyx_n_s_full;
  PyObject *__pyx_n_s_g;
  PyObject *__pyx_kp_u_gc;
  PyObject *__pyx_n_s_get;
  PyObject *__pyx_n_s_get_2;
  PyObject *__pyx_n_s_getitem;
  PyObject *__pyx_n_s_getrlimit;
  PyObject *__pyx_n_s_getstate;
  PyObject *__pyx_n_s_glob;
  PyObject *__pyx_n_s_global_context;
  PyObject *__pyx_n_s_global_context_2;
  PyObject *__pyx_n_s_global_context_set;
  PyObject *__pyx_n_s_global_context_set_2;
  PyObject *__pyx_n_s_graph;
  PyObject *__pyx_n_s_graph_api_capnp;
  PyObject *__pyx_n_s_graph_api_capnp_cython;
  PyObject *__pyx_n_s_graph_index;
  PyObject *__pyx_n_s_graphid;
  PyObject *__pyx_n_s_group_by_clusters;
  PyObject *__pyx_n_s_hard;
  PyObject *__pyx_n_s_ident;
  PyObject *__pyx_n_u_ident;
  PyObject *__pyx_n_s_immutables;
  PyObject *__pyx_n_s_import;
  PyObject *__pyx_n_s_inclusive;
  PyObject *__pyx_n_s_index;
  PyObject *__pyx_n_s_index_getter;
  PyObject *__pyx_n_s_index_getter_2;
  PyObject *__pyx_n_s_init;
  PyObject *__pyx_n_s_init_2;
  PyObject *__pyx_n_s_init_subclass;
  PyObject *__pyx_n_s_initialize;
  PyObject *__pyx_n_s_initialized;
  PyObject *__pyx_n_s_initializing;
  PyObject *__pyx_n_s_int;
  PyObject *__pyx_n_s_is_check_alignment;
  PyObject *__pyx_n_s_is_coroutine;
  PyObject *__pyx_n_s_is_dir;
  PyObject *__pyx_n_s_is_file;
  PyObject *__pyx_n_s_is_initialize;
  PyObject *__pyx_n_s_is_mount;
  PyObject *__pyx_n_s_is_predict;
  PyObject *__pyx_n_s_is_synchronize;
  PyObject *__pyx_kp_u_isenabled;
  PyObject *__pyx_n_s_items;
  PyObject *__pyx_n_s_itertools;
  PyObject *__pyx_n_s_kind;
  PyObject *__pyx_n_s_len;
  PyObject *__pyx_n_s_length;
  PyObject *__pyx_n_s_lgenerator;
  PyObject *__pyx_kp_s_list_Definition;
  PyObject *__pyx_kp_s_list_Node;
  PyObject *__pyx_kp_s_list_TacticPredictionsGraph;
  PyObject *__pyx_kp_s_list_TacticPredictionsText;
  PyObject *__pyx_kp_s_list_int;
  PyObject *__pyx_n_s_local_to_global;
  PyObject *__pyx_n_s_log_annotation;
  PyObject *__pyx_n_s_lowlevel;
  PyObject *__pyx_n_s_lowlevel_data_reader;
  PyObject *__pyx_n_s_lowlevel_to_highlevel;
  PyObject *__pyx_n_s_lreader;
  PyObject *__pyx_n_s_main;
  PyObject *__pyx_n_s_main_thread;
  PyObject *__pyx_n_s_major;
  PyObject *__pyx_n_s_memoryview;
  PyObject *__pyx_n_s_message_file;
  PyObject *__pyx_n_s_message_reader;
  PyObject *__pyx_kp_u_message_was_equal_to_the_record;
  PyObject *__pyx_kp_u_message_was_not_equal_to_the;
  PyObject *__pyx_n_s_metaclass;
  PyObject *__pyx_n_s_mm;
  PyObject *__pyx_n_s_mmap;
  PyObject *__pyx_n_s_module;
  PyObject *__pyx_n_s_mountpoint;
  PyObject *__pyx_n_s_msg;
  PyObject *__pyx_n_s_mv;
  PyObject *__pyx_n_s_n;
  PyObject *__pyx_n_s_name;
  PyObject *__pyx_n_s_name_2;
  PyObject *__pyx_n_s_new_context;
  PyObject *__pyx_n_s_new_message;
  PyObject *__pyx_n_s_new_set;
  PyObject *__pyx_n_s_new_soft;
  PyObject *__pyx_n_s_next_disabled_sigint;
  PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
  PyObject *__pyx_kp_u_node;
  PyObject *__pyx_n_u_nodeIndex;
  PyObject *__pyx_n_s_node_2;
  PyObject *__pyx_n_s_node_by_id;
  PyObject *__pyx_n_s_node_contents;
  PyObject *__pyx_n_s_node_dependencies;
  PyObject *__pyx_n_s_node_hash;
  PyObject *__pyx_n_s_node_label;
  PyObject *__pyx_n_s_nodeid;
  PyObject *__pyx_n_s_nodes;
  PyObject *__pyx_n_s_online_data_predict;
  PyObject *__pyx_n_s_online_definitions_initialize;
  PyObject *__pyx_n_s_open;
  PyObject *__pyx_n_s_original;
  PyObject *__pyx_n_s_p;
  PyObject *__pyx_n_s_parent;
  PyObject *__pyx_n_s_parts;
  PyObject *__pyx_n_s_pathlib;
  PyObject *__pyx_n_s_pg;
  PyObject *__pyx_n_s_pred;
  PyObject *__pyx_n_s_predict;
  PyObject *__pyx_n_s_prediction;
  PyObject *__pyx_n_s_prediction_generator;
  PyObject *__pyx_n_s_prediction_generator_locals_pred;
  PyObject *__pyx_n_s_prediction_generator_sub;
  PyObject *__pyx_n_s_prediction_requests;
  PyObject *__pyx_n_s_predictions;
  PyObject *__pyx_n_s_preds;
  PyObject *__pyx_n_s_prepare;
  PyObject *__pyx_n_s_prev;
  PyObject *__pyx_n_s_prev_sig;
  PyObject *__pyx_n_s_previous;
  PyObject *__pyx_n_s_print;
  PyObject *__pyx_n_s_proof;
  PyObject *__pyx_n_s_proof_state;
  PyObject *__pyx_n_s_propagate;
  PyObject *__pyx_n_s_propagate_2;
  PyObject *__pyx_n_s_pytact;
  PyObject *__pyx_n_s_pytact_data_reader;
  PyObject *__pyx_kp_s_pytact_data_reader_pyx;
  PyObject *__pyx_n_s_pytact_graph_api_capnp;
  PyObject *__pyx_n_s_pytact_graph_api_capnp_cython;
  PyObject *__pyx_kp_s_pytact_graph_api_capnp_cython_Ab;
  PyObject *__pyx_n_s_pyx_state;
  PyObject *__pyx_n_s_pyx_vtable;
  PyObject *__pyx_n_s_qualname;
  PyObject *__pyx_n_s_range;
  PyObject *__pyx_n_u_rb;
  PyObject *__pyx_n_s_read_multiple_packed;
  PyObject *__pyx_n_s_reader;
  PyObject *__pyx_n_s_record;
  PyObject *__pyx_n_s_recorded_response;
  PyObject *__pyx_kp_u_recorded_response_Recorded_respo;
  PyObject *__pyx_n_s_reduce;
  PyObject *__pyx_n_s_reduce_cython;
  PyObject *__pyx_n_s_reduce_ex;
  PyObject *__pyx_n_s_relative_to;
  PyObject *__pyx_n_s_rep;
  PyObject *__pyx_n_s_representative;
  PyObject *__pyx_n_s_representatives;
  PyObject *__pyx_n_s_request;
  PyObject *__pyx_n_s_resource;
  PyObject *__pyx_n_s_response;
  PyObject *__pyx_n_s_result;
  PyObject *__pyx_n_s_return;
  PyObject *__pyx_n_s_returncode;
  PyObject *__pyx_n_s_reversed;
  PyObject *__pyx_n_s_run;
  PyObject *__pyx_n_s_schema;
  PyObject *__pyx_n_s_seen;
  PyObject *__pyx_n_s_self;
  PyObject *__pyx_kp_s_self_edges_self_graph_index_cann;
  PyObject *__pyx_kp_s_self_graph_index_cannot_be_conve;
  PyObject *__pyx_kp_s_self_graph_index_self_node_canno;
  PyObject *__pyx_kp_s_self_graph_index_self_reader_can;
  PyObject *__pyx_n_s_send;
  PyObject *__pyx_n_s_set;
  PyObject *__pyx_kp_s_set_Definition;
  PyObject *__pyx_kp_s_set_Definition_None;
  PyObject *__pyx_kp_s_set_Node;
  PyObject *__pyx_n_s_set_name;
  PyObject *__pyx_n_s_setrlimit;
  PyObject *__pyx_n_s_setstate;
  PyObject *__pyx_n_s_setstate_cython;
  PyObject *__pyx_n_s_setup_dataset;
  PyObject *__pyx_n_s_should_propagate;
  PyObject *__pyx_n_s_shutil;
  PyObject *__pyx_n_s_signal;
  PyObject *__pyx_n_s_size;
  PyObject *__pyx_n_s_sleep;
  PyObject *__pyx_n_s_socket;
  PyObject *__pyx_kp_s_socket_socket;
  PyObject *__pyx_n_s_soft;
  PyObject *__pyx_n_s_spec;
  PyObject *__pyx_n_s_spine_only;
  PyObject *__pyx_n_u_squashfuse;
  PyObject *__pyx_n_s_stack;
  PyObject *__pyx_n_s_stack_size;
  PyObject *__pyx_n_s_start;
  PyObject *__pyx_n_s_staticmethod;
  PyObject *__pyx_n_s_stderr;
  PyObject *__pyx_n_s_stdout;
  PyObject *__pyx_n_s_str;
  PyObject *__pyx_kp_s_stringsource;
  PyObject *__pyx_n_s_sub_context;
  PyObject *__pyx_n_s_subprocess;
  PyObject *__pyx_kp_u_suggests_that_the_real_root_mig;
  PyObject *__pyx_n_s_super;
  PyObject *__pyx_n_s_synchronize;
  PyObject *__pyx_n_s_synchronized;
  PyObject *__pyx_n_s_tactic;
  PyObject *__pyx_n_u_tactic;
  PyObject *__pyx_n_u_tacticText;
  PyObject *__pyx_n_s_tactic_text;
  PyObject *__pyx_n_s_tactics;
  PyObject *__pyx_n_s_temp;
  PyObject *__pyx_n_u_term;
  PyObject *__pyx_n_s_test;
  PyObject *__pyx_n_s_text;
  PyObject *__pyx_n_s_textPrediction;
  PyObject *__pyx_n_s_threading;
  PyObject *__pyx_n_s_throw;
  PyObject *__pyx_n_s_time;
  PyObject *__pyx_n_s_to_dict;
  PyObject *__pyx_n_s_traversal_limit_in_words;
  PyObject *__pyx_n_s_typing;
  PyObject *__pyx_n_u_unalignedDefinitions;
  PyObject *__pyx_n_u_unalignedTactics;
  PyObject *__pyx_n_s_unknown_definitions;
  PyObject *__pyx_n_s_unknown_tactics;
  PyObject *__pyx_n_s_update;
  PyObject *__pyx_n_s_which;
  PyObject *__pyx_n_s_with_suffix;
  PyObject *__pyx_n_s_write_packed;
  PyObject *__pyx_float_0_01;
  PyObject *__pyx_int_0;
  PyObject *__pyx_int_1;
  PyObject *__pyx_int_18446744073709551615;
  PyObject *__pyx_codeobj_;
  PyObject *__pyx_tuple__2;
  PyObject *__pyx_tuple__3;
  PyObject *__pyx_tuple__7;
  PyObject *__pyx_tuple__11;
  PyObject *__pyx_tuple__14;
  PyObject *__pyx_tuple__16;
  PyObject *__pyx_tuple__20;
  PyObject *__pyx_tuple__22;
  PyObject *__pyx_tuple__28;
  PyObject *__pyx_tuple__29;
  PyObject *__pyx_tuple__34;
  PyObject *__pyx_tuple__35;
  PyObject *__pyx_tuple__36;
  PyObject *__pyx_tuple__37;
  PyObject *__pyx_tuple__39;
  PyObject *__pyx_tuple__41;
  PyObject *__pyx_tuple__43;
  PyObject *__pyx_tuple__44;
  PyObject *__pyx_tuple__47;
  PyObject *__pyx_tuple__49;
  PyObject *__pyx_tuple__51;
  PyObject *__pyx_tuple__74;
  PyObject *__pyx_tuple__75;
  PyObject *__pyx_tuple__77;
  PyObject *__pyx_tuple__79;
  PyObject *__pyx_tuple__84;
  PyObject *__pyx_tuple__86;
  PyObject *__pyx_tuple__88;
  PyObject *__pyx_tuple__92;
  PyObject *__pyx_tuple__94;
  PyObject *__pyx_tuple__96;
  PyObject *__pyx_tuple__98;
  PyObject *__pyx_tuple__99;
  PyObject *__pyx_codeobj__4;
  PyObject *__pyx_codeobj__9;
  PyObject *__pyx_tuple__103;
  PyObject *__pyx_tuple__104;
  PyObject *__pyx_tuple__106;
  PyObject *__pyx_tuple__107;
  PyObject *__pyx_tuple__109;
  PyObject *__pyx_tuple__110;
  PyObject *__pyx_tuple__111;
  PyObject *__pyx_tuple__112;
  PyObject *__pyx_tuple__113;
  PyObject *__pyx_tuple__114;
  PyObject *__pyx_tuple__116;
  PyObject *__pyx_tuple__117;
  PyObject *__pyx_tuple__119;
  PyObject *__pyx_tuple__120;
  PyObject *__pyx_tuple__122;
  PyObject *__pyx_tuple__124;
  PyObject *__pyx_tuple__126;
  PyObject *__pyx_tuple__128;
  PyObject *__pyx_tuple__129;
  PyObject *__pyx_tuple__131;
  PyObject *__pyx_tuple__132;
  PyObject *__pyx_codeobj__12;
  PyObject *__pyx_codeobj__13;
  PyObject *__pyx_codeobj__15;
  PyObject *__pyx_codeobj__17;
  PyObject *__pyx_codeobj__18;
  PyObject *__pyx_codeobj__19;
  PyObject *__pyx_codeobj__21;
  PyObject *__pyx_codeobj__23;
  PyObject *__pyx_codeobj__24;
  PyObject *__pyx_codeobj__26;
  PyObject *__pyx_codeobj__27;
  PyObject *__pyx_codeobj__30;
  PyObject *__pyx_codeobj__32;
  PyObject *__pyx_codeobj__38;
  PyObject *__pyx_codeobj__40;
  PyObject *__pyx_codeobj__42;
  PyObject *__pyx_codeobj__45;
  PyObject *__pyx_codeobj__46;
  PyObject *__pyx_codeobj__48;
  PyObject *__pyx_codeobj__50;
  PyObject *__pyx_codeobj__52;
  PyObject *__pyx_codeobj__53;
  PyObject *__pyx_codeobj__54;
  PyObject *__pyx_codeobj__55;
  PyObject *__pyx_codeobj__56;
  PyObject *__pyx_codeobj__57;
  PyObject *__pyx_codeobj__58;
  PyObject *__pyx_codeobj__59;
  PyObject *__pyx_codeobj__60;
  PyObject *__pyx_codeobj__61;
  PyObject *__pyx_codeobj__62;
  PyObject *__pyx_codeobj__63;
  PyObject *__pyx_codeobj__64;
  PyObject *__pyx_codeobj__65;
  PyObject *__pyx_codeobj__66;
  PyObject *__pyx_codeobj__67;
  PyObject *__pyx_codeobj__68;
  PyObject *__pyx_codeobj__69;
  PyObject *__pyx_codeobj__70;
  PyObject *__pyx_codeobj__71;
  PyObject *__pyx_codeobj__72;
  PyObject *__pyx_codeobj__73;
  PyObject *__pyx_codeobj__76;
  PyObject *__pyx_codeobj__78;
  PyObject *__pyx_codeobj__80;
  PyObject *__pyx_codeobj__81;
  PyObject *__pyx_codeobj__82;
  PyObject *__pyx_codeobj__83;
  PyObject *__pyx_codeobj__85;
  PyObject *__pyx_codeobj__87;
  PyObject *__pyx_codeobj__89;
  PyObject *__pyx_codeobj__90;
  PyObject *__pyx_codeobj__91;
  PyObject *__pyx_codeobj__93;
  PyObject *__pyx_codeobj__95;
  PyObject *__pyx_codeobj__97;
  PyObject *__pyx_codeobj__100;
  PyObject *__pyx_codeobj__101;
  PyObject *__pyx_codeobj__102;
  PyObject *__pyx_codeobj__105;
  PyObject *__pyx_codeobj__108;
  PyObject *__pyx_codeobj__115;
  PyObject *__pyx_codeobj__118;
  PyObject *__pyx_codeobj__121;
  PyObject *__pyx_codeobj__123;
  PyObject *__pyx_codeobj__125;
  PyObject *__pyx_codeobj__127;
  PyObject *__pyx_codeobj__130;
  PyObject *__pyx_codeobj__133;
} __pyx_mstate;

#ifdef __cplusplus
namespace {
  extern struct PyModuleDef __pyx_moduledef;
} /* anonymous namespace */
#else
static struct PyModuleDef __pyx_moduledef;
#endif

#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o))

#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef)))

#define __pyx_m (PyState_FindModule(&__pyx_moduledef))
#endif
/* #### Code section: module_state_clear ### */
#if CYTHON_USE_MODULE_STATE
static int __pyx_m_clear(PyObject *m) {
  __pyx_mstate *clear_module_state = __pyx_mstate(m);
  if (!clear_module_state) return 0;
  Py_CLEAR(clear_module_state->__pyx_d);
  Py_CLEAR(clear_module_state->__pyx_b);
  Py_CLEAR(clear_module_state->__pyx_cython_runtime);
  Py_CLEAR(clear_module_state->__pyx_empty_tuple);
  Py_CLEAR(clear_module_state->__pyx_empty_bytes);
  Py_CLEAR(clear_module_state->__pyx_empty_unicode);
  #ifdef __Pyx_CyFunction_USED
  Py_CLEAR(clear_module_state->__pyx_CyFunctionType);
  #endif
  #ifdef __Pyx_FusedFunction_USED
  Py_CLEAR(clear_module_state->__pyx_FusedFunctionType);
  #endif
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__StructSchemaField);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp_SchemaParser);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__Schema);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicEnum);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder);
  Py_CLEAR(clear_module_state->__pyx_ptype_5capnp_3lib_5capnp__MessageBuilder);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_String_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_LowlevelDataReader);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_LowlevelDataReader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Node);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Node);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_EdgeTarget_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_EdgeTarget_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Node_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Node_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_ProofState);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_ProofState);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_ProofState_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_ProofState_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Argument_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Argument_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Outcome);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Outcome);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Outcome_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Outcome_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_ProofStep);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_ProofStep);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_ProofStep_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_ProofStep_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Representative_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Representative_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Definition);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Definition);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Dataset_Definition_List);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_Dataset);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_Dataset);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader_OnlineDefinitionsReader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get__);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get__);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context);
  Py_CLEAR(clear_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context);
  Py_CLEAR(clear_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_ACCESS_READ);
  Py_CLEAR(clear_module_state->__pyx_n_s_Any);
  Py_CLEAR(clear_module_state->__pyx_n_s_Argument_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_Argument_List___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Argument_List___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError);
  Py_CLEAR(clear_module_state->__pyx_n_s_BinaryIO);
  Py_CLEAR(clear_module_state->__pyx_kp_s_BinaryIO_None);
  Py_CLEAR(clear_module_state->__pyx_n_s_Callable);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Callable_Definition_bool);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Callable_int_T);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Capnp_protocol_error);
  Py_CLEAR(clear_module_state->__pyx_n_s_CheckAlignmentMessage);
  Py_CLEAR(clear_module_state->__pyx_n_s_CheckAlignmentResponse);
  Py_CLEAR(clear_module_state->__pyx_n_s_Constructor);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset_Definition_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset_Definition_List___reduce);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset_Definition_List___setsta);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset_Reader);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset___get___locals_get);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset_clustered_definitions);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset_definitions);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Dataset_does_not_exist);
  Py_CLEAR(clear_module_state->__pyx_n_s_Dataset_node_by_id);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition___get);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition__global_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition__group_by_clusters);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition_clustered_global_cont);
  Py_CLEAR(clear_module_state->__pyx_n_s_Definition_global_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_Discharged);
  Py_CLEAR(clear_module_state->__pyx_n_s_EdgeTarget_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_EdgeTarget_List___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_EdgeTarget_List___setstate_cytho);
  Py_CLEAR(clear_module_state->__pyx_n_s_ExitStack);
  Py_CLEAR(clear_module_state->__pyx_n_s_Generator);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_Any_None_None);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_GlobalContextMessage_P);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_GlobalContextSets_None);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_LowlevelDataReader_Non);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_OnlineDefinitionsReade);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_ProofState_None_None);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_dict_Path_Dataset_None);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Generator_pytact_graph_api_capnp);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextMessage);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets);
  Py_CLEAR(clear_module_state->__pyx_kp_s_GlobalContextSets_None);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets___init);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets__global_contex);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets__propagate);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets_global_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets_new_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets_new_context_lo);
  Py_CLEAR(clear_module_state->__pyx_n_s_GlobalContextSets_sub_context);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Incorrect_predictions_received);
  Py_CLEAR(clear_module_state->__pyx_n_s_IndexError);
  Py_CLEAR(clear_module_state->__pyx_n_s_Inductive);
  Py_CLEAR(clear_module_state->__pyx_n_s_Iterable);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Iterable_Definition);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Iterable_list_Definition);
  Py_CLEAR(clear_module_state->__pyx_n_s_KeyError);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Lazily_retrieve_a_the_global_con);
  Py_CLEAR(clear_module_state->__pyx_n_s_LowlevelDataReader);
  Py_CLEAR(clear_module_state->__pyx_n_s_LowlevelDataReader___reduce_cyth);
  Py_CLEAR(clear_module_state->__pyx_n_s_LowlevelDataReader___setstate_cy);
  Py_CLEAR(clear_module_state->__pyx_n_s_LowlevelDataReader_local_to_glob);
  Py_CLEAR(clear_module_state->__pyx_n_s_ManualConstant);
  Py_CLEAR(clear_module_state->__pyx_n_s_ManualSectionConstant);
  Py_CLEAR(clear_module_state->__pyx_n_s_Map);
  Py_CLEAR(clear_module_state->__pyx_n_s_MemoryError);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Mount_did_not_appear);
  Py_CLEAR(clear_module_state->__pyx_n_s_Node);
  Py_CLEAR(clear_module_state->__pyx_n_s_NodeHash);
  Py_CLEAR(clear_module_state->__pyx_n_s_NodeId);
  Py_CLEAR(clear_module_state->__pyx_n_s_Node_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_Node_List___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Node_List___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Node___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Node___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Not_all_prediction_requests_were);
  Py_CLEAR(clear_module_state->__pyx_n_s_OnlineDefinitionsReader);
  Py_CLEAR(clear_module_state->__pyx_n_s_OnlineDefinitionsReader___reduce);
  Py_CLEAR(clear_module_state->__pyx_n_s_OnlineDefinitionsReader___setsta);
  Py_CLEAR(clear_module_state->__pyx_n_s_OnlineDefinitionsReader_clustere);
  Py_CLEAR(clear_module_state->__pyx_n_s_OnlineDefinitionsReader_definiti);
  Py_CLEAR(clear_module_state->__pyx_n_s_OnlineDefinitionsReader_local_to);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Options_across_files_True_and_sp);
  Py_CLEAR(clear_module_state->__pyx_n_s_Original);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Out_of_bounds);
  Py_CLEAR(clear_module_state->__pyx_n_s_Outcome);
  Py_CLEAR(clear_module_state->__pyx_n_s_Outcome_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_Outcome_List___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Outcome_List___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Outcome___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_Outcome___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_PIPE);
  Py_CLEAR(clear_module_state->__pyx_n_s_Path);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Path_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_PredictionProtocol);
  Py_CLEAR(clear_module_state->__pyx_n_s_Projection);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofState);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofStateId);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofState_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofState_List___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofState_List___setstate_cytho);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofState___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofState___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofStep);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofStep_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofStep_List___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofStep_List___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofStep___reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_ProofStep___setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_RLIMIT_NOFILE);
  Py_CLEAR(clear_module_state->__pyx_n_s_Representative_List);
  Py_CLEAR(clear_module_state->__pyx_n_s_Representative_List___reduce_cyt);
  Py_CLEAR(clear_module_state->__pyx_n_s_Representative_List___setstate_c);
  Py_CLEAR(clear_module_state->__pyx_n_s_Request);
  Py_CLEAR(clear_module_state->__pyx_n_s_Response);
  Py_CLEAR(clear_module_state->__pyx_n_s_SIGINT);
  Py_CLEAR(clear_module_state->__pyx_n_s_SIG_DFL);
  Py_CLEAR(clear_module_state->__pyx_n_s_Sequence);
  Py_CLEAR(clear_module_state->__pyx_kp_s_Sequence_ProofStep);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Servers_response);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Squashfuse_error);
  Py_CLEAR(clear_module_state->__pyx_n_s_StopIteration);
  Py_CLEAR(clear_module_state->__pyx_n_s_Substituted);
  Py_CLEAR(clear_module_state->__pyx_n_s_T);
  Py_CLEAR(clear_module_state->__pyx_n_u_T);
  Py_CLEAR(clear_module_state->__pyx_n_s_TacticId);
  Py_CLEAR(clear_module_state->__pyx_n_s_TacticPredictionGraph);
  Py_CLEAR(clear_module_state->__pyx_n_s_TacticPredictionText);
  Py_CLEAR(clear_module_state->__pyx_n_s_TacticPredictionsGraph);
  Py_CLEAR(clear_module_state->__pyx_n_s_TacticPredictionsText);
  Py_CLEAR(clear_module_state->__pyx_n_s_TacticalConstant);
  Py_CLEAR(clear_module_state->__pyx_n_s_TacticalSectionConstant);
  Py_CLEAR(clear_module_state->__pyx_kp_u_The_servers_response_to_a);
  Py_CLEAR(clear_module_state->__pyx_kp_u_There_does_not_appear_to_be_a_da);
  Py_CLEAR(clear_module_state->__pyx_kp_u_This_library_is_compiled_for_a_d);
  Py_CLEAR(clear_module_state->__pyx_n_s_TupleLike);
  Py_CLEAR(clear_module_state->__pyx_n_s_TupleLike___getitem);
  Py_CLEAR(clear_module_state->__pyx_n_s_TupleLike___init);
  Py_CLEAR(clear_module_state->__pyx_n_s_TupleLike___len);
  Py_CLEAR(clear_module_state->__pyx_n_s_TypeAlias);
  Py_CLEAR(clear_module_state->__pyx_n_s_TypeError);
  Py_CLEAR(clear_module_state->__pyx_n_s_TypeVar);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Unable_to_mount_dataset);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Unable_to_mount_dataset_Executab);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Unable_to_mount_dataset_Mountpoi);
  Py_CLEAR(clear_module_state->__pyx_kp_u_Unable_to_mount_dataset_Squashfu);
  Py_CLEAR(clear_module_state->__pyx_n_s_Union);
  Py_CLEAR(clear_module_state->__pyx_n_s_Unknown);
  Py_CLEAR(clear_module_state->__pyx_n_s_Unresolvable);
  Py_CLEAR(clear_module_state->__pyx_n_s_ValueError);
  Py_CLEAR(clear_module_state->__pyx_kp_u__10);
  Py_CLEAR(clear_module_state->__pyx_n_s__134);
  Py_CLEAR(clear_module_state->__pyx_kp_u__25);
  Py_CLEAR(clear_module_state->__pyx_n_s__31);
  Py_CLEAR(clear_module_state->__pyx_n_s__33);
  Py_CLEAR(clear_module_state->__pyx_kp_u__5);
  Py_CLEAR(clear_module_state->__pyx_kp_u__6);
  Py_CLEAR(clear_module_state->__pyx_kp_u__8);
  Py_CLEAR(clear_module_state->__pyx_n_s_a);
  Py_CLEAR(clear_module_state->__pyx_n_s_access);
  Py_CLEAR(clear_module_state->__pyx_n_s_across_files);
  Py_CLEAR(clear_module_state->__pyx_n_s_add);
  Py_CLEAR(clear_module_state->__pyx_n_s_alignment);
  Py_CLEAR(clear_module_state->__pyx_n_s_annotations);
  Py_CLEAR(clear_module_state->__pyx_n_s_apic);
  Py_CLEAR(clear_module_state->__pyx_n_s_args);
  Py_CLEAR(clear_module_state->__pyx_n_s_arguments);
  Py_CLEAR(clear_module_state->__pyx_n_u_arguments);
  Py_CLEAR(clear_module_state->__pyx_n_s_as_builder);
  Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines);
  Py_CLEAR(clear_module_state->__pyx_n_s_base);
  Py_CLEAR(clear_module_state->__pyx_kp_u_bin);
  Py_CLEAR(clear_module_state->__pyx_n_s_bool);
  Py_CLEAR(clear_module_state->__pyx_kp_u_but_file);
  Py_CLEAR(clear_module_state->__pyx_kp_u_but_file_Coq_sent_a_message_ver);
  Py_CLEAR(clear_module_state->__pyx_n_s_c);
  Py_CLEAR(clear_module_state->__pyx_n_s_cache);
  Py_CLEAR(clear_module_state->__pyx_n_s_capnp);
  Py_CLEAR(clear_module_state->__pyx_n_s_capnp_message_generator);
  Py_CLEAR(clear_module_state->__pyx_n_s_capnp_message_generator_from_fil);
  Py_CLEAR(clear_module_state->__pyx_n_s_capnp_message_generator_from_fil_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_capnp_message_generator_lowlevel);
  Py_CLEAR(clear_module_state->__pyx_n_s_capnp_message_generator_lowlevel_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_cast);
  Py_CLEAR(clear_module_state->__pyx_n_s_check);
  Py_CLEAR(clear_module_state->__pyx_n_s_child);
  Py_CLEAR(clear_module_state->__pyx_n_s_child_graph);
  Py_CLEAR(clear_module_state->__pyx_n_s_children);
  Py_CLEAR(clear_module_state->__pyx_n_s_children_index);
  Py_CLEAR(clear_module_state->__pyx_n_s_children_limit);
  Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem);
  Py_CLEAR(clear_module_state->__pyx_n_s_clear_write_flag);
  Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback);
  Py_CLEAR(clear_module_state->__pyx_n_s_close);
  Py_CLEAR(clear_module_state->__pyx_n_s_cls);
  Py_CLEAR(clear_module_state->__pyx_n_s_cluster);
  Py_CLEAR(clear_module_state->__pyx_n_s_cluster_representative);
  Py_CLEAR(clear_module_state->__pyx_n_s_clustered_definitions);
  Py_CLEAR(clear_module_state->__pyx_n_s_clustered_global_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_collections_abc);
  Py_CLEAR(clear_module_state->__pyx_n_s_confidence);
  Py_CLEAR(clear_module_state->__pyx_n_u_confidence);
  Py_CLEAR(clear_module_state->__pyx_kp_u_contains_data_versioned_as);
  Py_CLEAR(clear_module_state->__pyx_n_s_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_contextlib);
  Py_CLEAR(clear_module_state->__pyx_n_s_contextmanager);
  Py_CLEAR(clear_module_state->__pyx_n_s_convert_predictions);
  Py_CLEAR(clear_module_state->__pyx_n_s_count);
  Py_CLEAR(clear_module_state->__pyx_n_s_count_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_create_mmap);
  Py_CLEAR(clear_module_state->__pyx_n_s_currentVersion);
  Py_CLEAR(clear_module_state->__pyx_n_s_current_node);
  Py_CLEAR(clear_module_state->__pyx_n_s_current_thread);
  Py_CLEAR(clear_module_state->__pyx_n_s_cython_msg);
  Py_CLEAR(clear_module_state->__pyx_n_s_d);
  Py_CLEAR(clear_module_state->__pyx_n_s_data_reader);
  Py_CLEAR(clear_module_state->__pyx_n_s_data_version);
  Py_CLEAR(clear_module_state->__pyx_n_s_dataclass);
  Py_CLEAR(clear_module_state->__pyx_n_s_dataclasses);
  Py_CLEAR(clear_module_state->__pyx_n_s_dataset);
  Py_CLEAR(clear_module_state->__pyx_n_s_dataset_path);
  Py_CLEAR(clear_module_state->__pyx_n_s_decode);
  Py_CLEAR(clear_module_state->__pyx_n_s_definition);
  Py_CLEAR(clear_module_state->__pyx_n_s_definition_dependencies);
  Py_CLEAR(clear_module_state->__pyx_n_s_definitions);
  Py_CLEAR(clear_module_state->__pyx_n_s_definitions_it);
  Py_CLEAR(clear_module_state->__pyx_n_s_defs);
  Py_CLEAR(clear_module_state->__pyx_n_u_depIndex);
  Py_CLEAR(clear_module_state->__pyx_n_s_dep_index);
  Py_CLEAR(clear_module_state->__pyx_n_s_dependencies);
  Py_CLEAR(clear_module_state->__pyx_n_s_deps);
  Py_CLEAR(clear_module_state->__pyx_n_s_dict);
  Py_CLEAR(clear_module_state->__pyx_kp_s_dict_Path_Dataset);
  Py_CLEAR(clear_module_state->__pyx_kp_u_disable);
  Py_CLEAR(clear_module_state->__pyx_n_s_doc);
  Py_CLEAR(clear_module_state->__pyx_kp_u_doesn_t_appear_to_be_the_root_o);
  Py_CLEAR(clear_module_state->__pyx_n_s_dr);
  Py_CLEAR(clear_module_state->__pyx_n_s_edge_target);
  Py_CLEAR(clear_module_state->__pyx_n_s_edges);
  Py_CLEAR(clear_module_state->__pyx_n_s_empty_online_definitions_initial);
  Py_CLEAR(clear_module_state->__pyx_kp_u_enable);
  Py_CLEAR(clear_module_state->__pyx_n_s_enter);
  Py_CLEAR(clear_module_state->__pyx_n_s_enter_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_enumerate);
  Py_CLEAR(clear_module_state->__pyx_n_s_ep);
  Py_CLEAR(clear_module_state->__pyx_n_s_eprev);
  Py_CLEAR(clear_module_state->__pyx_n_s_exists);
  Py_CLEAR(clear_module_state->__pyx_n_s_exit);
  Py_CLEAR(clear_module_state->__pyx_n_s_external_previous);
  Py_CLEAR(clear_module_state->__pyx_n_s_f);
  Py_CLEAR(clear_module_state->__pyx_n_s_file_dataset_reader);
  Py_CLEAR(clear_module_state->__pyx_n_s_file_dataset_reader_locals_creat);
  Py_CLEAR(clear_module_state->__pyx_n_s_fileno);
  Py_CLEAR(clear_module_state->__pyx_n_s_float);
  Py_CLEAR(clear_module_state->__pyx_n_s_fname);
  Py_CLEAR(clear_module_state->__pyx_n_s_fnames);
  Py_CLEAR(clear_module_state->__pyx_n_s_from_bytes);
  Py_CLEAR(clear_module_state->__pyx_n_s_full);
  Py_CLEAR(clear_module_state->__pyx_n_s_g);
  Py_CLEAR(clear_module_state->__pyx_kp_u_gc);
  Py_CLEAR(clear_module_state->__pyx_n_s_get);
  Py_CLEAR(clear_module_state->__pyx_n_s_get_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_getitem);
  Py_CLEAR(clear_module_state->__pyx_n_s_getrlimit);
  Py_CLEAR(clear_module_state->__pyx_n_s_getstate);
  Py_CLEAR(clear_module_state->__pyx_n_s_glob);
  Py_CLEAR(clear_module_state->__pyx_n_s_global_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_global_context_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_global_context_set);
  Py_CLEAR(clear_module_state->__pyx_n_s_global_context_set_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_graph);
  Py_CLEAR(clear_module_state->__pyx_n_s_graph_api_capnp);
  Py_CLEAR(clear_module_state->__pyx_n_s_graph_api_capnp_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_graph_index);
  Py_CLEAR(clear_module_state->__pyx_n_s_graphid);
  Py_CLEAR(clear_module_state->__pyx_n_s_group_by_clusters);
  Py_CLEAR(clear_module_state->__pyx_n_s_hard);
  Py_CLEAR(clear_module_state->__pyx_n_s_ident);
  Py_CLEAR(clear_module_state->__pyx_n_u_ident);
  Py_CLEAR(clear_module_state->__pyx_n_s_immutables);
  Py_CLEAR(clear_module_state->__pyx_n_s_import);
  Py_CLEAR(clear_module_state->__pyx_n_s_inclusive);
  Py_CLEAR(clear_module_state->__pyx_n_s_index);
  Py_CLEAR(clear_module_state->__pyx_n_s_index_getter);
  Py_CLEAR(clear_module_state->__pyx_n_s_index_getter_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_init);
  Py_CLEAR(clear_module_state->__pyx_n_s_init_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass);
  Py_CLEAR(clear_module_state->__pyx_n_s_initialize);
  Py_CLEAR(clear_module_state->__pyx_n_s_initialized);
  Py_CLEAR(clear_module_state->__pyx_n_s_initializing);
  Py_CLEAR(clear_module_state->__pyx_n_s_int);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_check_alignment);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_dir);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_file);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_initialize);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_mount);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_predict);
  Py_CLEAR(clear_module_state->__pyx_n_s_is_synchronize);
  Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled);
  Py_CLEAR(clear_module_state->__pyx_n_s_items);
  Py_CLEAR(clear_module_state->__pyx_n_s_itertools);
  Py_CLEAR(clear_module_state->__pyx_n_s_kind);
  Py_CLEAR(clear_module_state->__pyx_n_s_len);
  Py_CLEAR(clear_module_state->__pyx_n_s_length);
  Py_CLEAR(clear_module_state->__pyx_n_s_lgenerator);
  Py_CLEAR(clear_module_state->__pyx_kp_s_list_Definition);
  Py_CLEAR(clear_module_state->__pyx_kp_s_list_Node);
  Py_CLEAR(clear_module_state->__pyx_kp_s_list_TacticPredictionsGraph);
  Py_CLEAR(clear_module_state->__pyx_kp_s_list_TacticPredictionsText);
  Py_CLEAR(clear_module_state->__pyx_kp_s_list_int);
  Py_CLEAR(clear_module_state->__pyx_n_s_local_to_global);
  Py_CLEAR(clear_module_state->__pyx_n_s_log_annotation);
  Py_CLEAR(clear_module_state->__pyx_n_s_lowlevel);
  Py_CLEAR(clear_module_state->__pyx_n_s_lowlevel_data_reader);
  Py_CLEAR(clear_module_state->__pyx_n_s_lowlevel_to_highlevel);
  Py_CLEAR(clear_module_state->__pyx_n_s_lreader);
  Py_CLEAR(clear_module_state->__pyx_n_s_main);
  Py_CLEAR(clear_module_state->__pyx_n_s_main_thread);
  Py_CLEAR(clear_module_state->__pyx_n_s_major);
  Py_CLEAR(clear_module_state->__pyx_n_s_memoryview);
  Py_CLEAR(clear_module_state->__pyx_n_s_message_file);
  Py_CLEAR(clear_module_state->__pyx_n_s_message_reader);
  Py_CLEAR(clear_module_state->__pyx_kp_u_message_was_equal_to_the_record);
  Py_CLEAR(clear_module_state->__pyx_kp_u_message_was_not_equal_to_the);
  Py_CLEAR(clear_module_state->__pyx_n_s_metaclass);
  Py_CLEAR(clear_module_state->__pyx_n_s_mm);
  Py_CLEAR(clear_module_state->__pyx_n_s_mmap);
  Py_CLEAR(clear_module_state->__pyx_n_s_module);
  Py_CLEAR(clear_module_state->__pyx_n_s_mountpoint);
  Py_CLEAR(clear_module_state->__pyx_n_s_msg);
  Py_CLEAR(clear_module_state->__pyx_n_s_mv);
  Py_CLEAR(clear_module_state->__pyx_n_s_n);
  Py_CLEAR(clear_module_state->__pyx_n_s_name);
  Py_CLEAR(clear_module_state->__pyx_n_s_name_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_new_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_new_message);
  Py_CLEAR(clear_module_state->__pyx_n_s_new_set);
  Py_CLEAR(clear_module_state->__pyx_n_s_new_soft);
  Py_CLEAR(clear_module_state->__pyx_n_s_next_disabled_sigint);
  Py_CLEAR(clear_module_state->__pyx_kp_s_no_default___reduce___due_to_non);
  Py_CLEAR(clear_module_state->__pyx_kp_u_node);
  Py_CLEAR(clear_module_state->__pyx_n_u_nodeIndex);
  Py_CLEAR(clear_module_state->__pyx_n_s_node_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_node_by_id);
  Py_CLEAR(clear_module_state->__pyx_n_s_node_contents);
  Py_CLEAR(clear_module_state->__pyx_n_s_node_dependencies);
  Py_CLEAR(clear_module_state->__pyx_n_s_node_hash);
  Py_CLEAR(clear_module_state->__pyx_n_s_node_label);
  Py_CLEAR(clear_module_state->__pyx_n_s_nodeid);
  Py_CLEAR(clear_module_state->__pyx_n_s_nodes);
  Py_CLEAR(clear_module_state->__pyx_n_s_online_data_predict);
  Py_CLEAR(clear_module_state->__pyx_n_s_online_definitions_initialize);
  Py_CLEAR(clear_module_state->__pyx_n_s_open);
  Py_CLEAR(clear_module_state->__pyx_n_s_original);
  Py_CLEAR(clear_module_state->__pyx_n_s_p);
  Py_CLEAR(clear_module_state->__pyx_n_s_parent);
  Py_CLEAR(clear_module_state->__pyx_n_s_parts);
  Py_CLEAR(clear_module_state->__pyx_n_s_pathlib);
  Py_CLEAR(clear_module_state->__pyx_n_s_pg);
  Py_CLEAR(clear_module_state->__pyx_n_s_pred);
  Py_CLEAR(clear_module_state->__pyx_n_s_predict);
  Py_CLEAR(clear_module_state->__pyx_n_s_prediction);
  Py_CLEAR(clear_module_state->__pyx_n_s_prediction_generator);
  Py_CLEAR(clear_module_state->__pyx_n_s_prediction_generator_locals_pred);
  Py_CLEAR(clear_module_state->__pyx_n_s_prediction_generator_sub);
  Py_CLEAR(clear_module_state->__pyx_n_s_prediction_requests);
  Py_CLEAR(clear_module_state->__pyx_n_s_predictions);
  Py_CLEAR(clear_module_state->__pyx_n_s_preds);
  Py_CLEAR(clear_module_state->__pyx_n_s_prepare);
  Py_CLEAR(clear_module_state->__pyx_n_s_prev);
  Py_CLEAR(clear_module_state->__pyx_n_s_prev_sig);
  Py_CLEAR(clear_module_state->__pyx_n_s_previous);
  Py_CLEAR(clear_module_state->__pyx_n_s_print);
  Py_CLEAR(clear_module_state->__pyx_n_s_proof);
  Py_CLEAR(clear_module_state->__pyx_n_s_proof_state);
  Py_CLEAR(clear_module_state->__pyx_n_s_propagate);
  Py_CLEAR(clear_module_state->__pyx_n_s_propagate_2);
  Py_CLEAR(clear_module_state->__pyx_n_s_pytact);
  Py_CLEAR(clear_module_state->__pyx_n_s_pytact_data_reader);
  Py_CLEAR(clear_module_state->__pyx_kp_s_pytact_data_reader_pyx);
  Py_CLEAR(clear_module_state->__pyx_n_s_pytact_graph_api_capnp);
  Py_CLEAR(clear_module_state->__pyx_n_s_pytact_graph_api_capnp_cython);
  Py_CLEAR(clear_module_state->__pyx_kp_s_pytact_graph_api_capnp_cython_Ab);
  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state);
  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable);
  Py_CLEAR(clear_module_state->__pyx_n_s_qualname);
  Py_CLEAR(clear_module_state->__pyx_n_s_range);
  Py_CLEAR(clear_module_state->__pyx_n_u_rb);
  Py_CLEAR(clear_module_state->__pyx_n_s_read_multiple_packed);
  Py_CLEAR(clear_module_state->__pyx_n_s_reader);
  Py_CLEAR(clear_module_state->__pyx_n_s_record);
  Py_CLEAR(clear_module_state->__pyx_n_s_recorded_response);
  Py_CLEAR(clear_module_state->__pyx_kp_u_recorded_response_Recorded_respo);
  Py_CLEAR(clear_module_state->__pyx_n_s_reduce);
  Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex);
  Py_CLEAR(clear_module_state->__pyx_n_s_relative_to);
  Py_CLEAR(clear_module_state->__pyx_n_s_rep);
  Py_CLEAR(clear_module_state->__pyx_n_s_representative);
  Py_CLEAR(clear_module_state->__pyx_n_s_representatives);
  Py_CLEAR(clear_module_state->__pyx_n_s_request);
  Py_CLEAR(clear_module_state->__pyx_n_s_resource);
  Py_CLEAR(clear_module_state->__pyx_n_s_response);
  Py_CLEAR(clear_module_state->__pyx_n_s_result);
  Py_CLEAR(clear_module_state->__pyx_n_s_return);
  Py_CLEAR(clear_module_state->__pyx_n_s_returncode);
  Py_CLEAR(clear_module_state->__pyx_n_s_reversed);
  Py_CLEAR(clear_module_state->__pyx_n_s_run);
  Py_CLEAR(clear_module_state->__pyx_n_s_schema);
  Py_CLEAR(clear_module_state->__pyx_n_s_seen);
  Py_CLEAR(clear_module_state->__pyx_n_s_self);
  Py_CLEAR(clear_module_state->__pyx_kp_s_self_edges_self_graph_index_cann);
  Py_CLEAR(clear_module_state->__pyx_kp_s_self_graph_index_cannot_be_conve);
  Py_CLEAR(clear_module_state->__pyx_kp_s_self_graph_index_self_node_canno);
  Py_CLEAR(clear_module_state->__pyx_kp_s_self_graph_index_self_reader_can);
  Py_CLEAR(clear_module_state->__pyx_n_s_send);
  Py_CLEAR(clear_module_state->__pyx_n_s_set);
  Py_CLEAR(clear_module_state->__pyx_kp_s_set_Definition);
  Py_CLEAR(clear_module_state->__pyx_kp_s_set_Definition_None);
  Py_CLEAR(clear_module_state->__pyx_kp_s_set_Node);
  Py_CLEAR(clear_module_state->__pyx_n_s_set_name);
  Py_CLEAR(clear_module_state->__pyx_n_s_setrlimit);
  Py_CLEAR(clear_module_state->__pyx_n_s_setstate);
  Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython);
  Py_CLEAR(clear_module_state->__pyx_n_s_setup_dataset);
  Py_CLEAR(clear_module_state->__pyx_n_s_should_propagate);
  Py_CLEAR(clear_module_state->__pyx_n_s_shutil);
  Py_CLEAR(clear_module_state->__pyx_n_s_signal);
  Py_CLEAR(clear_module_state->__pyx_n_s_size);
  Py_CLEAR(clear_module_state->__pyx_n_s_sleep);
  Py_CLEAR(clear_module_state->__pyx_n_s_socket);
  Py_CLEAR(clear_module_state->__pyx_kp_s_socket_socket);
  Py_CLEAR(clear_module_state->__pyx_n_s_soft);
  Py_CLEAR(clear_module_state->__pyx_n_s_spec);
  Py_CLEAR(clear_module_state->__pyx_n_s_spine_only);
  Py_CLEAR(clear_module_state->__pyx_n_u_squashfuse);
  Py_CLEAR(clear_module_state->__pyx_n_s_stack);
  Py_CLEAR(clear_module_state->__pyx_n_s_stack_size);
  Py_CLEAR(clear_module_state->__pyx_n_s_start);
  Py_CLEAR(clear_module_state->__pyx_n_s_staticmethod);
  Py_CLEAR(clear_module_state->__pyx_n_s_stderr);
  Py_CLEAR(clear_module_state->__pyx_n_s_stdout);
  Py_CLEAR(clear_module_state->__pyx_n_s_str);
  Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource);
  Py_CLEAR(clear_module_state->__pyx_n_s_sub_context);
  Py_CLEAR(clear_module_state->__pyx_n_s_subprocess);
  Py_CLEAR(clear_module_state->__pyx_kp_u_suggests_that_the_real_root_mig);
  Py_CLEAR(clear_module_state->__pyx_n_s_super);
  Py_CLEAR(clear_module_state->__pyx_n_s_synchronize);
  Py_CLEAR(clear_module_state->__pyx_n_s_synchronized);
  Py_CLEAR(clear_module_state->__pyx_n_s_tactic);
  Py_CLEAR(clear_module_state->__pyx_n_u_tactic);
  Py_CLEAR(clear_module_state->__pyx_n_u_tacticText);
  Py_CLEAR(clear_module_state->__pyx_n_s_tactic_text);
  Py_CLEAR(clear_module_state->__pyx_n_s_tactics);
  Py_CLEAR(clear_module_state->__pyx_n_s_temp);
  Py_CLEAR(clear_module_state->__pyx_n_u_term);
  Py_CLEAR(clear_module_state->__pyx_n_s_test);
  Py_CLEAR(clear_module_state->__pyx_n_s_text);
  Py_CLEAR(clear_module_state->__pyx_n_s_textPrediction);
  Py_CLEAR(clear_module_state->__pyx_n_s_threading);
  Py_CLEAR(clear_module_state->__pyx_n_s_throw);
  Py_CLEAR(clear_module_state->__pyx_n_s_time);
  Py_CLEAR(clear_module_state->__pyx_n_s_to_dict);
  Py_CLEAR(clear_module_state->__pyx_n_s_traversal_limit_in_words);
  Py_CLEAR(clear_module_state->__pyx_n_s_typing);
  Py_CLEAR(clear_module_state->__pyx_n_u_unalignedDefinitions);
  Py_CLEAR(clear_module_state->__pyx_n_u_unalignedTactics);
  Py_CLEAR(clear_module_state->__pyx_n_s_unknown_definitions);
  Py_CLEAR(clear_module_state->__pyx_n_s_unknown_tactics);
  Py_CLEAR(clear_module_state->__pyx_n_s_update);
  Py_CLEAR(clear_module_state->__pyx_n_s_which);
  Py_CLEAR(clear_module_state->__pyx_n_s_with_suffix);
  Py_CLEAR(clear_module_state->__pyx_n_s_write_packed);
  Py_CLEAR(clear_module_state->__pyx_float_0_01);
  Py_CLEAR(clear_module_state->__pyx_int_0);
  Py_CLEAR(clear_module_state->__pyx_int_1);
  Py_CLEAR(clear_module_state->__pyx_int_18446744073709551615);
  Py_CLEAR(clear_module_state->__pyx_codeobj_);
  Py_CLEAR(clear_module_state->__pyx_tuple__2);
  Py_CLEAR(clear_module_state->__pyx_tuple__3);
  Py_CLEAR(clear_module_state->__pyx_tuple__7);
  Py_CLEAR(clear_module_state->__pyx_tuple__11);
  Py_CLEAR(clear_module_state->__pyx_tuple__14);
  Py_CLEAR(clear_module_state->__pyx_tuple__16);
  Py_CLEAR(clear_module_state->__pyx_tuple__20);
  Py_CLEAR(clear_module_state->__pyx_tuple__22);
  Py_CLEAR(clear_module_state->__pyx_tuple__28);
  Py_CLEAR(clear_module_state->__pyx_tuple__29);
  Py_CLEAR(clear_module_state->__pyx_tuple__34);
  Py_CLEAR(clear_module_state->__pyx_tuple__35);
  Py_CLEAR(clear_module_state->__pyx_tuple__36);
  Py_CLEAR(clear_module_state->__pyx_tuple__37);
  Py_CLEAR(clear_module_state->__pyx_tuple__39);
  Py_CLEAR(clear_module_state->__pyx_tuple__41);
  Py_CLEAR(clear_module_state->__pyx_tuple__43);
  Py_CLEAR(clear_module_state->__pyx_tuple__44);
  Py_CLEAR(clear_module_state->__pyx_tuple__47);
  Py_CLEAR(clear_module_state->__pyx_tuple__49);
  Py_CLEAR(clear_module_state->__pyx_tuple__51);
  Py_CLEAR(clear_module_state->__pyx_tuple__74);
  Py_CLEAR(clear_module_state->__pyx_tuple__75);
  Py_CLEAR(clear_module_state->__pyx_tuple__77);
  Py_CLEAR(clear_module_state->__pyx_tuple__79);
  Py_CLEAR(clear_module_state->__pyx_tuple__84);
  Py_CLEAR(clear_module_state->__pyx_tuple__86);
  Py_CLEAR(clear_module_state->__pyx_tuple__88);
  Py_CLEAR(clear_module_state->__pyx_tuple__92);
  Py_CLEAR(clear_module_state->__pyx_tuple__94);
  Py_CLEAR(clear_module_state->__pyx_tuple__96);
  Py_CLEAR(clear_module_state->__pyx_tuple__98);
  Py_CLEAR(clear_module_state->__pyx_tuple__99);
  Py_CLEAR(clear_module_state->__pyx_codeobj__4);
  Py_CLEAR(clear_module_state->__pyx_codeobj__9);
  Py_CLEAR(clear_module_state->__pyx_tuple__103);
  Py_CLEAR(clear_module_state->__pyx_tuple__104);
  Py_CLEAR(clear_module_state->__pyx_tuple__106);
  Py_CLEAR(clear_module_state->__pyx_tuple__107);
  Py_CLEAR(clear_module_state->__pyx_tuple__109);
  Py_CLEAR(clear_module_state->__pyx_tuple__110);
  Py_CLEAR(clear_module_state->__pyx_tuple__111);
  Py_CLEAR(clear_module_state->__pyx_tuple__112);
  Py_CLEAR(clear_module_state->__pyx_tuple__113);
  Py_CLEAR(clear_module_state->__pyx_tuple__114);
  Py_CLEAR(clear_module_state->__pyx_tuple__116);
  Py_CLEAR(clear_module_state->__pyx_tuple__117);
  Py_CLEAR(clear_module_state->__pyx_tuple__119);
  Py_CLEAR(clear_module_state->__pyx_tuple__120);
  Py_CLEAR(clear_module_state->__pyx_tuple__122);
  Py_CLEAR(clear_module_state->__pyx_tuple__124);
  Py_CLEAR(clear_module_state->__pyx_tuple__126);
  Py_CLEAR(clear_module_state->__pyx_tuple__128);
  Py_CLEAR(clear_module_state->__pyx_tuple__129);
  Py_CLEAR(clear_module_state->__pyx_tuple__131);
  Py_CLEAR(clear_module_state->__pyx_tuple__132);
  Py_CLEAR(clear_module_state->__pyx_codeobj__12);
  Py_CLEAR(clear_module_state->__pyx_codeobj__13);
  Py_CLEAR(clear_module_state->__pyx_codeobj__15);
  Py_CLEAR(clear_module_state->__pyx_codeobj__17);
  Py_CLEAR(clear_module_state->__pyx_codeobj__18);
  Py_CLEAR(clear_module_state->__pyx_codeobj__19);
  Py_CLEAR(clear_module_state->__pyx_codeobj__21);
  Py_CLEAR(clear_module_state->__pyx_codeobj__23);
  Py_CLEAR(clear_module_state->__pyx_codeobj__24);
  Py_CLEAR(clear_module_state->__pyx_codeobj__26);
  Py_CLEAR(clear_module_state->__pyx_codeobj__27);
  Py_CLEAR(clear_module_state->__pyx_codeobj__30);
  Py_CLEAR(clear_module_state->__pyx_codeobj__32);
  Py_CLEAR(clear_module_state->__pyx_codeobj__38);
  Py_CLEAR(clear_module_state->__pyx_codeobj__40);
  Py_CLEAR(clear_module_state->__pyx_codeobj__42);
  Py_CLEAR(clear_module_state->__pyx_codeobj__45);
  Py_CLEAR(clear_module_state->__pyx_codeobj__46);
  Py_CLEAR(clear_module_state->__pyx_codeobj__48);
  Py_CLEAR(clear_module_state->__pyx_codeobj__50);
  Py_CLEAR(clear_module_state->__pyx_codeobj__52);
  Py_CLEAR(clear_module_state->__pyx_codeobj__53);
  Py_CLEAR(clear_module_state->__pyx_codeobj__54);
  Py_CLEAR(clear_module_state->__pyx_codeobj__55);
  Py_CLEAR(clear_module_state->__pyx_codeobj__56);
  Py_CLEAR(clear_module_state->__pyx_codeobj__57);
  Py_CLEAR(clear_module_state->__pyx_codeobj__58);
  Py_CLEAR(clear_module_state->__pyx_codeobj__59);
  Py_CLEAR(clear_module_state->__pyx_codeobj__60);
  Py_CLEAR(clear_module_state->__pyx_codeobj__61);
  Py_CLEAR(clear_module_state->__pyx_codeobj__62);
  Py_CLEAR(clear_module_state->__pyx_codeobj__63);
  Py_CLEAR(clear_module_state->__pyx_codeobj__64);
  Py_CLEAR(clear_module_state->__pyx_codeobj__65);
  Py_CLEAR(clear_module_state->__pyx_codeobj__66);
  Py_CLEAR(clear_module_state->__pyx_codeobj__67);
  Py_CLEAR(clear_module_state->__pyx_codeobj__68);
  Py_CLEAR(clear_module_state->__pyx_codeobj__69);
  Py_CLEAR(clear_module_state->__pyx_codeobj__70);
  Py_CLEAR(clear_module_state->__pyx_codeobj__71);
  Py_CLEAR(clear_module_state->__pyx_codeobj__72);
  Py_CLEAR(clear_module_state->__pyx_codeobj__73);
  Py_CLEAR(clear_module_state->__pyx_codeobj__76);
  Py_CLEAR(clear_module_state->__pyx_codeobj__78);
  Py_CLEAR(clear_module_state->__pyx_codeobj__80);
  Py_CLEAR(clear_module_state->__pyx_codeobj__81);
  Py_CLEAR(clear_module_state->__pyx_codeobj__82);
  Py_CLEAR(clear_module_state->__pyx_codeobj__83);
  Py_CLEAR(clear_module_state->__pyx_codeobj__85);
  Py_CLEAR(clear_module_state->__pyx_codeobj__87);
  Py_CLEAR(clear_module_state->__pyx_codeobj__89);
  Py_CLEAR(clear_module_state->__pyx_codeobj__90);
  Py_CLEAR(clear_module_state->__pyx_codeobj__91);
  Py_CLEAR(clear_module_state->__pyx_codeobj__93);
  Py_CLEAR(clear_module_state->__pyx_codeobj__95);
  Py_CLEAR(clear_module_state->__pyx_codeobj__97);
  Py_CLEAR(clear_module_state->__pyx_codeobj__100);
  Py_CLEAR(clear_module_state->__pyx_codeobj__101);
  Py_CLEAR(clear_module_state->__pyx_codeobj__102);
  Py_CLEAR(clear_module_state->__pyx_codeobj__105);
  Py_CLEAR(clear_module_state->__pyx_codeobj__108);
  Py_CLEAR(clear_module_state->__pyx_codeobj__115);
  Py_CLEAR(clear_module_state->__pyx_codeobj__118);
  Py_CLEAR(clear_module_state->__pyx_codeobj__121);
  Py_CLEAR(clear_module_state->__pyx_codeobj__123);
  Py_CLEAR(clear_module_state->__pyx_codeobj__125);
  Py_CLEAR(clear_module_state->__pyx_codeobj__127);
  Py_CLEAR(clear_module_state->__pyx_codeobj__130);
  Py_CLEAR(clear_module_state->__pyx_codeobj__133);
  return 0;
}
#endif
/* #### Code section: module_state_traverse ### */
#if CYTHON_USE_MODULE_STATE
static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
  __pyx_mstate *traverse_module_state = __pyx_mstate(m);
  if (!traverse_module_state) return 0;
  Py_VISIT(traverse_module_state->__pyx_d);
  Py_VISIT(traverse_module_state->__pyx_b);
  Py_VISIT(traverse_module_state->__pyx_cython_runtime);
  Py_VISIT(traverse_module_state->__pyx_empty_tuple);
  Py_VISIT(traverse_module_state->__pyx_empty_bytes);
  Py_VISIT(traverse_module_state->__pyx_empty_unicode);
  #ifdef __Pyx_CyFunction_USED
  Py_VISIT(traverse_module_state->__pyx_CyFunctionType);
  #endif
  #ifdef __Pyx_FusedFunction_USED
  Py_VISIT(traverse_module_state->__pyx_FusedFunctionType);
  #endif
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__StructSchemaField);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp_SchemaParser);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__Schema);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicEnum);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder);
  Py_VISIT(traverse_module_state->__pyx_ptype_5capnp_3lib_5capnp__MessageBuilder);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_String_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_LowlevelDataReader);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_LowlevelDataReader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Node);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Node);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_EdgeTarget_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_EdgeTarget_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Node_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Node_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_ProofState);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_ProofState);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_ProofState_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_ProofState_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Argument_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Argument_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Outcome);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Outcome);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Outcome_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Outcome_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_ProofStep);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_ProofStep);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_ProofStep_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_ProofStep_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Representative_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Representative_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Definition);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Definition);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Dataset_Definition_List);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_Dataset);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_Dataset);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader_OnlineDefinitionsReader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get__);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get__);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context);
  Py_VISIT(traverse_module_state->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context);
  Py_VISIT(traverse_module_state->__pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_ACCESS_READ);
  Py_VISIT(traverse_module_state->__pyx_n_s_Any);
  Py_VISIT(traverse_module_state->__pyx_n_s_Argument_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_Argument_List___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Argument_List___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError);
  Py_VISIT(traverse_module_state->__pyx_n_s_BinaryIO);
  Py_VISIT(traverse_module_state->__pyx_kp_s_BinaryIO_None);
  Py_VISIT(traverse_module_state->__pyx_n_s_Callable);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Callable_Definition_bool);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Callable_int_T);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Capnp_protocol_error);
  Py_VISIT(traverse_module_state->__pyx_n_s_CheckAlignmentMessage);
  Py_VISIT(traverse_module_state->__pyx_n_s_CheckAlignmentResponse);
  Py_VISIT(traverse_module_state->__pyx_n_s_Constructor);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset_Definition_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset_Definition_List___reduce);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset_Definition_List___setsta);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset_Reader);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset___get___locals_get);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset_clustered_definitions);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset_definitions);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Dataset_does_not_exist);
  Py_VISIT(traverse_module_state->__pyx_n_s_Dataset_node_by_id);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition___get);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition__global_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition__group_by_clusters);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition_clustered_global_cont);
  Py_VISIT(traverse_module_state->__pyx_n_s_Definition_global_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_Discharged);
  Py_VISIT(traverse_module_state->__pyx_n_s_EdgeTarget_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_EdgeTarget_List___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_EdgeTarget_List___setstate_cytho);
  Py_VISIT(traverse_module_state->__pyx_n_s_ExitStack);
  Py_VISIT(traverse_module_state->__pyx_n_s_Generator);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_Any_None_None);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_GlobalContextMessage_P);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_GlobalContextSets_None);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_LowlevelDataReader_Non);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_OnlineDefinitionsReade);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_ProofState_None_None);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_dict_Path_Dataset_None);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Generator_pytact_graph_api_capnp);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextMessage);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets);
  Py_VISIT(traverse_module_state->__pyx_kp_s_GlobalContextSets_None);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets___init);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets__global_contex);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets__propagate);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets_global_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets_new_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets_new_context_lo);
  Py_VISIT(traverse_module_state->__pyx_n_s_GlobalContextSets_sub_context);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Incorrect_predictions_received);
  Py_VISIT(traverse_module_state->__pyx_n_s_IndexError);
  Py_VISIT(traverse_module_state->__pyx_n_s_Inductive);
  Py_VISIT(traverse_module_state->__pyx_n_s_Iterable);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Iterable_Definition);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Iterable_list_Definition);
  Py_VISIT(traverse_module_state->__pyx_n_s_KeyError);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Lazily_retrieve_a_the_global_con);
  Py_VISIT(traverse_module_state->__pyx_n_s_LowlevelDataReader);
  Py_VISIT(traverse_module_state->__pyx_n_s_LowlevelDataReader___reduce_cyth);
  Py_VISIT(traverse_module_state->__pyx_n_s_LowlevelDataReader___setstate_cy);
  Py_VISIT(traverse_module_state->__pyx_n_s_LowlevelDataReader_local_to_glob);
  Py_VISIT(traverse_module_state->__pyx_n_s_ManualConstant);
  Py_VISIT(traverse_module_state->__pyx_n_s_ManualSectionConstant);
  Py_VISIT(traverse_module_state->__pyx_n_s_Map);
  Py_VISIT(traverse_module_state->__pyx_n_s_MemoryError);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Mount_did_not_appear);
  Py_VISIT(traverse_module_state->__pyx_n_s_Node);
  Py_VISIT(traverse_module_state->__pyx_n_s_NodeHash);
  Py_VISIT(traverse_module_state->__pyx_n_s_NodeId);
  Py_VISIT(traverse_module_state->__pyx_n_s_Node_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_Node_List___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Node_List___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Node___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Node___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Not_all_prediction_requests_were);
  Py_VISIT(traverse_module_state->__pyx_n_s_OnlineDefinitionsReader);
  Py_VISIT(traverse_module_state->__pyx_n_s_OnlineDefinitionsReader___reduce);
  Py_VISIT(traverse_module_state->__pyx_n_s_OnlineDefinitionsReader___setsta);
  Py_VISIT(traverse_module_state->__pyx_n_s_OnlineDefinitionsReader_clustere);
  Py_VISIT(traverse_module_state->__pyx_n_s_OnlineDefinitionsReader_definiti);
  Py_VISIT(traverse_module_state->__pyx_n_s_OnlineDefinitionsReader_local_to);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Options_across_files_True_and_sp);
  Py_VISIT(traverse_module_state->__pyx_n_s_Original);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Out_of_bounds);
  Py_VISIT(traverse_module_state->__pyx_n_s_Outcome);
  Py_VISIT(traverse_module_state->__pyx_n_s_Outcome_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_Outcome_List___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Outcome_List___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Outcome___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_Outcome___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_PIPE);
  Py_VISIT(traverse_module_state->__pyx_n_s_Path);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Path_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_PredictionProtocol);
  Py_VISIT(traverse_module_state->__pyx_n_s_Projection);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofState);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofStateId);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofState_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofState_List___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofState_List___setstate_cytho);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofState___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofState___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofStep);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofStep_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofStep_List___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofStep_List___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofStep___reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_ProofStep___setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_RLIMIT_NOFILE);
  Py_VISIT(traverse_module_state->__pyx_n_s_Representative_List);
  Py_VISIT(traverse_module_state->__pyx_n_s_Representative_List___reduce_cyt);
  Py_VISIT(traverse_module_state->__pyx_n_s_Representative_List___setstate_c);
  Py_VISIT(traverse_module_state->__pyx_n_s_Request);
  Py_VISIT(traverse_module_state->__pyx_n_s_Response);
  Py_VISIT(traverse_module_state->__pyx_n_s_SIGINT);
  Py_VISIT(traverse_module_state->__pyx_n_s_SIG_DFL);
  Py_VISIT(traverse_module_state->__pyx_n_s_Sequence);
  Py_VISIT(traverse_module_state->__pyx_kp_s_Sequence_ProofStep);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Servers_response);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Squashfuse_error);
  Py_VISIT(traverse_module_state->__pyx_n_s_StopIteration);
  Py_VISIT(traverse_module_state->__pyx_n_s_Substituted);
  Py_VISIT(traverse_module_state->__pyx_n_s_T);
  Py_VISIT(traverse_module_state->__pyx_n_u_T);
  Py_VISIT(traverse_module_state->__pyx_n_s_TacticId);
  Py_VISIT(traverse_module_state->__pyx_n_s_TacticPredictionGraph);
  Py_VISIT(traverse_module_state->__pyx_n_s_TacticPredictionText);
  Py_VISIT(traverse_module_state->__pyx_n_s_TacticPredictionsGraph);
  Py_VISIT(traverse_module_state->__pyx_n_s_TacticPredictionsText);
  Py_VISIT(traverse_module_state->__pyx_n_s_TacticalConstant);
  Py_VISIT(traverse_module_state->__pyx_n_s_TacticalSectionConstant);
  Py_VISIT(traverse_module_state->__pyx_kp_u_The_servers_response_to_a);
  Py_VISIT(traverse_module_state->__pyx_kp_u_There_does_not_appear_to_be_a_da);
  Py_VISIT(traverse_module_state->__pyx_kp_u_This_library_is_compiled_for_a_d);
  Py_VISIT(traverse_module_state->__pyx_n_s_TupleLike);
  Py_VISIT(traverse_module_state->__pyx_n_s_TupleLike___getitem);
  Py_VISIT(traverse_module_state->__pyx_n_s_TupleLike___init);
  Py_VISIT(traverse_module_state->__pyx_n_s_TupleLike___len);
  Py_VISIT(traverse_module_state->__pyx_n_s_TypeAlias);
  Py_VISIT(traverse_module_state->__pyx_n_s_TypeError);
  Py_VISIT(traverse_module_state->__pyx_n_s_TypeVar);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Unable_to_mount_dataset);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Unable_to_mount_dataset_Executab);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Unable_to_mount_dataset_Mountpoi);
  Py_VISIT(traverse_module_state->__pyx_kp_u_Unable_to_mount_dataset_Squashfu);
  Py_VISIT(traverse_module_state->__pyx_n_s_Union);
  Py_VISIT(traverse_module_state->__pyx_n_s_Unknown);
  Py_VISIT(traverse_module_state->__pyx_n_s_Unresolvable);
  Py_VISIT(traverse_module_state->__pyx_n_s_ValueError);
  Py_VISIT(traverse_module_state->__pyx_kp_u__10);
  Py_VISIT(traverse_module_state->__pyx_n_s__134);
  Py_VISIT(traverse_module_state->__pyx_kp_u__25);
  Py_VISIT(traverse_module_state->__pyx_n_s__31);
  Py_VISIT(traverse_module_state->__pyx_n_s__33);
  Py_VISIT(traverse_module_state->__pyx_kp_u__5);
  Py_VISIT(traverse_module_state->__pyx_kp_u__6);
  Py_VISIT(traverse_module_state->__pyx_kp_u__8);
  Py_VISIT(traverse_module_state->__pyx_n_s_a);
  Py_VISIT(traverse_module_state->__pyx_n_s_access);
  Py_VISIT(traverse_module_state->__pyx_n_s_across_files);
  Py_VISIT(traverse_module_state->__pyx_n_s_add);
  Py_VISIT(traverse_module_state->__pyx_n_s_alignment);
  Py_VISIT(traverse_module_state->__pyx_n_s_annotations);
  Py_VISIT(traverse_module_state->__pyx_n_s_apic);
  Py_VISIT(traverse_module_state->__pyx_n_s_args);
  Py_VISIT(traverse_module_state->__pyx_n_s_arguments);
  Py_VISIT(traverse_module_state->__pyx_n_u_arguments);
  Py_VISIT(traverse_module_state->__pyx_n_s_as_builder);
  Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines);
  Py_VISIT(traverse_module_state->__pyx_n_s_base);
  Py_VISIT(traverse_module_state->__pyx_kp_u_bin);
  Py_VISIT(traverse_module_state->__pyx_n_s_bool);
  Py_VISIT(traverse_module_state->__pyx_kp_u_but_file);
  Py_VISIT(traverse_module_state->__pyx_kp_u_but_file_Coq_sent_a_message_ver);
  Py_VISIT(traverse_module_state->__pyx_n_s_c);
  Py_VISIT(traverse_module_state->__pyx_n_s_cache);
  Py_VISIT(traverse_module_state->__pyx_n_s_capnp);
  Py_VISIT(traverse_module_state->__pyx_n_s_capnp_message_generator);
  Py_VISIT(traverse_module_state->__pyx_n_s_capnp_message_generator_from_fil);
  Py_VISIT(traverse_module_state->__pyx_n_s_capnp_message_generator_from_fil_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_capnp_message_generator_lowlevel);
  Py_VISIT(traverse_module_state->__pyx_n_s_capnp_message_generator_lowlevel_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_cast);
  Py_VISIT(traverse_module_state->__pyx_n_s_check);
  Py_VISIT(traverse_module_state->__pyx_n_s_child);
  Py_VISIT(traverse_module_state->__pyx_n_s_child_graph);
  Py_VISIT(traverse_module_state->__pyx_n_s_children);
  Py_VISIT(traverse_module_state->__pyx_n_s_children_index);
  Py_VISIT(traverse_module_state->__pyx_n_s_children_limit);
  Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem);
  Py_VISIT(traverse_module_state->__pyx_n_s_clear_write_flag);
  Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback);
  Py_VISIT(traverse_module_state->__pyx_n_s_close);
  Py_VISIT(traverse_module_state->__pyx_n_s_cls);
  Py_VISIT(traverse_module_state->__pyx_n_s_cluster);
  Py_VISIT(traverse_module_state->__pyx_n_s_cluster_representative);
  Py_VISIT(traverse_module_state->__pyx_n_s_clustered_definitions);
  Py_VISIT(traverse_module_state->__pyx_n_s_clustered_global_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_collections_abc);
  Py_VISIT(traverse_module_state->__pyx_n_s_confidence);
  Py_VISIT(traverse_module_state->__pyx_n_u_confidence);
  Py_VISIT(traverse_module_state->__pyx_kp_u_contains_data_versioned_as);
  Py_VISIT(traverse_module_state->__pyx_n_s_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_contextlib);
  Py_VISIT(traverse_module_state->__pyx_n_s_contextmanager);
  Py_VISIT(traverse_module_state->__pyx_n_s_convert_predictions);
  Py_VISIT(traverse_module_state->__pyx_n_s_count);
  Py_VISIT(traverse_module_state->__pyx_n_s_count_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_create_mmap);
  Py_VISIT(traverse_module_state->__pyx_n_s_currentVersion);
  Py_VISIT(traverse_module_state->__pyx_n_s_current_node);
  Py_VISIT(traverse_module_state->__pyx_n_s_current_thread);
  Py_VISIT(traverse_module_state->__pyx_n_s_cython_msg);
  Py_VISIT(traverse_module_state->__pyx_n_s_d);
  Py_VISIT(traverse_module_state->__pyx_n_s_data_reader);
  Py_VISIT(traverse_module_state->__pyx_n_s_data_version);
  Py_VISIT(traverse_module_state->__pyx_n_s_dataclass);
  Py_VISIT(traverse_module_state->__pyx_n_s_dataclasses);
  Py_VISIT(traverse_module_state->__pyx_n_s_dataset);
  Py_VISIT(traverse_module_state->__pyx_n_s_dataset_path);
  Py_VISIT(traverse_module_state->__pyx_n_s_decode);
  Py_VISIT(traverse_module_state->__pyx_n_s_definition);
  Py_VISIT(traverse_module_state->__pyx_n_s_definition_dependencies);
  Py_VISIT(traverse_module_state->__pyx_n_s_definitions);
  Py_VISIT(traverse_module_state->__pyx_n_s_definitions_it);
  Py_VISIT(traverse_module_state->__pyx_n_s_defs);
  Py_VISIT(traverse_module_state->__pyx_n_u_depIndex);
  Py_VISIT(traverse_module_state->__pyx_n_s_dep_index);
  Py_VISIT(traverse_module_state->__pyx_n_s_dependencies);
  Py_VISIT(traverse_module_state->__pyx_n_s_deps);
  Py_VISIT(traverse_module_state->__pyx_n_s_dict);
  Py_VISIT(traverse_module_state->__pyx_kp_s_dict_Path_Dataset);
  Py_VISIT(traverse_module_state->__pyx_kp_u_disable);
  Py_VISIT(traverse_module_state->__pyx_n_s_doc);
  Py_VISIT(traverse_module_state->__pyx_kp_u_doesn_t_appear_to_be_the_root_o);
  Py_VISIT(traverse_module_state->__pyx_n_s_dr);
  Py_VISIT(traverse_module_state->__pyx_n_s_edge_target);
  Py_VISIT(traverse_module_state->__pyx_n_s_edges);
  Py_VISIT(traverse_module_state->__pyx_n_s_empty_online_definitions_initial);
  Py_VISIT(traverse_module_state->__pyx_kp_u_enable);
  Py_VISIT(traverse_module_state->__pyx_n_s_enter);
  Py_VISIT(traverse_module_state->__pyx_n_s_enter_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_enumerate);
  Py_VISIT(traverse_module_state->__pyx_n_s_ep);
  Py_VISIT(traverse_module_state->__pyx_n_s_eprev);
  Py_VISIT(traverse_module_state->__pyx_n_s_exists);
  Py_VISIT(traverse_module_state->__pyx_n_s_exit);
  Py_VISIT(traverse_module_state->__pyx_n_s_external_previous);
  Py_VISIT(traverse_module_state->__pyx_n_s_f);
  Py_VISIT(traverse_module_state->__pyx_n_s_file_dataset_reader);
  Py_VISIT(traverse_module_state->__pyx_n_s_file_dataset_reader_locals_creat);
  Py_VISIT(traverse_module_state->__pyx_n_s_fileno);
  Py_VISIT(traverse_module_state->__pyx_n_s_float);
  Py_VISIT(traverse_module_state->__pyx_n_s_fname);
  Py_VISIT(traverse_module_state->__pyx_n_s_fnames);
  Py_VISIT(traverse_module_state->__pyx_n_s_from_bytes);
  Py_VISIT(traverse_module_state->__pyx_n_s_full);
  Py_VISIT(traverse_module_state->__pyx_n_s_g);
  Py_VISIT(traverse_module_state->__pyx_kp_u_gc);
  Py_VISIT(traverse_module_state->__pyx_n_s_get);
  Py_VISIT(traverse_module_state->__pyx_n_s_get_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_getitem);
  Py_VISIT(traverse_module_state->__pyx_n_s_getrlimit);
  Py_VISIT(traverse_module_state->__pyx_n_s_getstate);
  Py_VISIT(traverse_module_state->__pyx_n_s_glob);
  Py_VISIT(traverse_module_state->__pyx_n_s_global_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_global_context_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_global_context_set);
  Py_VISIT(traverse_module_state->__pyx_n_s_global_context_set_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_graph);
  Py_VISIT(traverse_module_state->__pyx_n_s_graph_api_capnp);
  Py_VISIT(traverse_module_state->__pyx_n_s_graph_api_capnp_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_graph_index);
  Py_VISIT(traverse_module_state->__pyx_n_s_graphid);
  Py_VISIT(traverse_module_state->__pyx_n_s_group_by_clusters);
  Py_VISIT(traverse_module_state->__pyx_n_s_hard);
  Py_VISIT(traverse_module_state->__pyx_n_s_ident);
  Py_VISIT(traverse_module_state->__pyx_n_u_ident);
  Py_VISIT(traverse_module_state->__pyx_n_s_immutables);
  Py_VISIT(traverse_module_state->__pyx_n_s_import);
  Py_VISIT(traverse_module_state->__pyx_n_s_inclusive);
  Py_VISIT(traverse_module_state->__pyx_n_s_index);
  Py_VISIT(traverse_module_state->__pyx_n_s_index_getter);
  Py_VISIT(traverse_module_state->__pyx_n_s_index_getter_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_init);
  Py_VISIT(traverse_module_state->__pyx_n_s_init_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass);
  Py_VISIT(traverse_module_state->__pyx_n_s_initialize);
  Py_VISIT(traverse_module_state->__pyx_n_s_initialized);
  Py_VISIT(traverse_module_state->__pyx_n_s_initializing);
  Py_VISIT(traverse_module_state->__pyx_n_s_int);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_check_alignment);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_dir);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_file);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_initialize);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_mount);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_predict);
  Py_VISIT(traverse_module_state->__pyx_n_s_is_synchronize);
  Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled);
  Py_VISIT(traverse_module_state->__pyx_n_s_items);
  Py_VISIT(traverse_module_state->__pyx_n_s_itertools);
  Py_VISIT(traverse_module_state->__pyx_n_s_kind);
  Py_VISIT(traverse_module_state->__pyx_n_s_len);
  Py_VISIT(traverse_module_state->__pyx_n_s_length);
  Py_VISIT(traverse_module_state->__pyx_n_s_lgenerator);
  Py_VISIT(traverse_module_state->__pyx_kp_s_list_Definition);
  Py_VISIT(traverse_module_state->__pyx_kp_s_list_Node);
  Py_VISIT(traverse_module_state->__pyx_kp_s_list_TacticPredictionsGraph);
  Py_VISIT(traverse_module_state->__pyx_kp_s_list_TacticPredictionsText);
  Py_VISIT(traverse_module_state->__pyx_kp_s_list_int);
  Py_VISIT(traverse_module_state->__pyx_n_s_local_to_global);
  Py_VISIT(traverse_module_state->__pyx_n_s_log_annotation);
  Py_VISIT(traverse_module_state->__pyx_n_s_lowlevel);
  Py_VISIT(traverse_module_state->__pyx_n_s_lowlevel_data_reader);
  Py_VISIT(traverse_module_state->__pyx_n_s_lowlevel_to_highlevel);
  Py_VISIT(traverse_module_state->__pyx_n_s_lreader);
  Py_VISIT(traverse_module_state->__pyx_n_s_main);
  Py_VISIT(traverse_module_state->__pyx_n_s_main_thread);
  Py_VISIT(traverse_module_state->__pyx_n_s_major);
  Py_VISIT(traverse_module_state->__pyx_n_s_memoryview);
  Py_VISIT(traverse_module_state->__pyx_n_s_message_file);
  Py_VISIT(traverse_module_state->__pyx_n_s_message_reader);
  Py_VISIT(traverse_module_state->__pyx_kp_u_message_was_equal_to_the_record);
  Py_VISIT(traverse_module_state->__pyx_kp_u_message_was_not_equal_to_the);
  Py_VISIT(traverse_module_state->__pyx_n_s_metaclass);
  Py_VISIT(traverse_module_state->__pyx_n_s_mm);
  Py_VISIT(traverse_module_state->__pyx_n_s_mmap);
  Py_VISIT(traverse_module_state->__pyx_n_s_module);
  Py_VISIT(traverse_module_state->__pyx_n_s_mountpoint);
  Py_VISIT(traverse_module_state->__pyx_n_s_msg);
  Py_VISIT(traverse_module_state->__pyx_n_s_mv);
  Py_VISIT(traverse_module_state->__pyx_n_s_n);
  Py_VISIT(traverse_module_state->__pyx_n_s_name);
  Py_VISIT(traverse_module_state->__pyx_n_s_name_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_new_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_new_message);
  Py_VISIT(traverse_module_state->__pyx_n_s_new_set);
  Py_VISIT(traverse_module_state->__pyx_n_s_new_soft);
  Py_VISIT(traverse_module_state->__pyx_n_s_next_disabled_sigint);
  Py_VISIT(traverse_module_state->__pyx_kp_s_no_default___reduce___due_to_non);
  Py_VISIT(traverse_module_state->__pyx_kp_u_node);
  Py_VISIT(traverse_module_state->__pyx_n_u_nodeIndex);
  Py_VISIT(traverse_module_state->__pyx_n_s_node_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_node_by_id);
  Py_VISIT(traverse_module_state->__pyx_n_s_node_contents);
  Py_VISIT(traverse_module_state->__pyx_n_s_node_dependencies);
  Py_VISIT(traverse_module_state->__pyx_n_s_node_hash);
  Py_VISIT(traverse_module_state->__pyx_n_s_node_label);
  Py_VISIT(traverse_module_state->__pyx_n_s_nodeid);
  Py_VISIT(traverse_module_state->__pyx_n_s_nodes);
  Py_VISIT(traverse_module_state->__pyx_n_s_online_data_predict);
  Py_VISIT(traverse_module_state->__pyx_n_s_online_definitions_initialize);
  Py_VISIT(traverse_module_state->__pyx_n_s_open);
  Py_VISIT(traverse_module_state->__pyx_n_s_original);
  Py_VISIT(traverse_module_state->__pyx_n_s_p);
  Py_VISIT(traverse_module_state->__pyx_n_s_parent);
  Py_VISIT(traverse_module_state->__pyx_n_s_parts);
  Py_VISIT(traverse_module_state->__pyx_n_s_pathlib);
  Py_VISIT(traverse_module_state->__pyx_n_s_pg);
  Py_VISIT(traverse_module_state->__pyx_n_s_pred);
  Py_VISIT(traverse_module_state->__pyx_n_s_predict);
  Py_VISIT(traverse_module_state->__pyx_n_s_prediction);
  Py_VISIT(traverse_module_state->__pyx_n_s_prediction_generator);
  Py_VISIT(traverse_module_state->__pyx_n_s_prediction_generator_locals_pred);
  Py_VISIT(traverse_module_state->__pyx_n_s_prediction_generator_sub);
  Py_VISIT(traverse_module_state->__pyx_n_s_prediction_requests);
  Py_VISIT(traverse_module_state->__pyx_n_s_predictions);
  Py_VISIT(traverse_module_state->__pyx_n_s_preds);
  Py_VISIT(traverse_module_state->__pyx_n_s_prepare);
  Py_VISIT(traverse_module_state->__pyx_n_s_prev);
  Py_VISIT(traverse_module_state->__pyx_n_s_prev_sig);
  Py_VISIT(traverse_module_state->__pyx_n_s_previous);
  Py_VISIT(traverse_module_state->__pyx_n_s_print);
  Py_VISIT(traverse_module_state->__pyx_n_s_proof);
  Py_VISIT(traverse_module_state->__pyx_n_s_proof_state);
  Py_VISIT(traverse_module_state->__pyx_n_s_propagate);
  Py_VISIT(traverse_module_state->__pyx_n_s_propagate_2);
  Py_VISIT(traverse_module_state->__pyx_n_s_pytact);
  Py_VISIT(traverse_module_state->__pyx_n_s_pytact_data_reader);
  Py_VISIT(traverse_module_state->__pyx_kp_s_pytact_data_reader_pyx);
  Py_VISIT(traverse_module_state->__pyx_n_s_pytact_graph_api_capnp);
  Py_VISIT(traverse_module_state->__pyx_n_s_pytact_graph_api_capnp_cython);
  Py_VISIT(traverse_module_state->__pyx_kp_s_pytact_graph_api_capnp_cython_Ab);
  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state);
  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable);
  Py_VISIT(traverse_module_state->__pyx_n_s_qualname);
  Py_VISIT(traverse_module_state->__pyx_n_s_range);
  Py_VISIT(traverse_module_state->__pyx_n_u_rb);
  Py_VISIT(traverse_module_state->__pyx_n_s_read_multiple_packed);
  Py_VISIT(traverse_module_state->__pyx_n_s_reader);
  Py_VISIT(traverse_module_state->__pyx_n_s_record);
  Py_VISIT(traverse_module_state->__pyx_n_s_recorded_response);
  Py_VISIT(traverse_module_state->__pyx_kp_u_recorded_response_Recorded_respo);
  Py_VISIT(traverse_module_state->__pyx_n_s_reduce);
  Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex);
  Py_VISIT(traverse_module_state->__pyx_n_s_relative_to);
  Py_VISIT(traverse_module_state->__pyx_n_s_rep);
  Py_VISIT(traverse_module_state->__pyx_n_s_representative);
  Py_VISIT(traverse_module_state->__pyx_n_s_representatives);
  Py_VISIT(traverse_module_state->__pyx_n_s_request);
  Py_VISIT(traverse_module_state->__pyx_n_s_resource);
  Py_VISIT(traverse_module_state->__pyx_n_s_response);
  Py_VISIT(traverse_module_state->__pyx_n_s_result);
  Py_VISIT(traverse_module_state->__pyx_n_s_return);
  Py_VISIT(traverse_module_state->__pyx_n_s_returncode);
  Py_VISIT(traverse_module_state->__pyx_n_s_reversed);
  Py_VISIT(traverse_module_state->__pyx_n_s_run);
  Py_VISIT(traverse_module_state->__pyx_n_s_schema);
  Py_VISIT(traverse_module_state->__pyx_n_s_seen);
  Py_VISIT(traverse_module_state->__pyx_n_s_self);
  Py_VISIT(traverse_module_state->__pyx_kp_s_self_edges_self_graph_index_cann);
  Py_VISIT(traverse_module_state->__pyx_kp_s_self_graph_index_cannot_be_conve);
  Py_VISIT(traverse_module_state->__pyx_kp_s_self_graph_index_self_node_canno);
  Py_VISIT(traverse_module_state->__pyx_kp_s_self_graph_index_self_reader_can);
  Py_VISIT(traverse_module_state->__pyx_n_s_send);
  Py_VISIT(traverse_module_state->__pyx_n_s_set);
  Py_VISIT(traverse_module_state->__pyx_kp_s_set_Definition);
  Py_VISIT(traverse_module_state->__pyx_kp_s_set_Definition_None);
  Py_VISIT(traverse_module_state->__pyx_kp_s_set_Node);
  Py_VISIT(traverse_module_state->__pyx_n_s_set_name);
  Py_VISIT(traverse_module_state->__pyx_n_s_setrlimit);
  Py_VISIT(traverse_module_state->__pyx_n_s_setstate);
  Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython);
  Py_VISIT(traverse_module_state->__pyx_n_s_setup_dataset);
  Py_VISIT(traverse_module_state->__pyx_n_s_should_propagate);
  Py_VISIT(traverse_module_state->__pyx_n_s_shutil);
  Py_VISIT(traverse_module_state->__pyx_n_s_signal);
  Py_VISIT(traverse_module_state->__pyx_n_s_size);
  Py_VISIT(traverse_module_state->__pyx_n_s_sleep);
  Py_VISIT(traverse_module_state->__pyx_n_s_socket);
  Py_VISIT(traverse_module_state->__pyx_kp_s_socket_socket);
  Py_VISIT(traverse_module_state->__pyx_n_s_soft);
  Py_VISIT(traverse_module_state->__pyx_n_s_spec);
  Py_VISIT(traverse_module_state->__pyx_n_s_spine_only);
  Py_VISIT(traverse_module_state->__pyx_n_u_squashfuse);
  Py_VISIT(traverse_module_state->__pyx_n_s_stack);
  Py_VISIT(traverse_module_state->__pyx_n_s_stack_size);
  Py_VISIT(traverse_module_state->__pyx_n_s_start);
  Py_VISIT(traverse_module_state->__pyx_n_s_staticmethod);
  Py_VISIT(traverse_module_state->__pyx_n_s_stderr);
  Py_VISIT(traverse_module_state->__pyx_n_s_stdout);
  Py_VISIT(traverse_module_state->__pyx_n_s_str);
  Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource);
  Py_VISIT(traverse_module_state->__pyx_n_s_sub_context);
  Py_VISIT(traverse_module_state->__pyx_n_s_subprocess);
  Py_VISIT(traverse_module_state->__pyx_kp_u_suggests_that_the_real_root_mig);
  Py_VISIT(traverse_module_state->__pyx_n_s_super);
  Py_VISIT(traverse_module_state->__pyx_n_s_synchronize);
  Py_VISIT(traverse_module_state->__pyx_n_s_synchronized);
  Py_VISIT(traverse_module_state->__pyx_n_s_tactic);
  Py_VISIT(traverse_module_state->__pyx_n_u_tactic);
  Py_VISIT(traverse_module_state->__pyx_n_u_tacticText);
  Py_VISIT(traverse_module_state->__pyx_n_s_tactic_text);
  Py_VISIT(traverse_module_state->__pyx_n_s_tactics);
  Py_VISIT(traverse_module_state->__pyx_n_s_temp);
  Py_VISIT(traverse_module_state->__pyx_n_u_term);
  Py_VISIT(traverse_module_state->__pyx_n_s_test);
  Py_VISIT(traverse_module_state->__pyx_n_s_text);
  Py_VISIT(traverse_module_state->__pyx_n_s_textPrediction);
  Py_VISIT(traverse_module_state->__pyx_n_s_threading);
  Py_VISIT(traverse_module_state->__pyx_n_s_throw);
  Py_VISIT(traverse_module_state->__pyx_n_s_time);
  Py_VISIT(traverse_module_state->__pyx_n_s_to_dict);
  Py_VISIT(traverse_module_state->__pyx_n_s_traversal_limit_in_words);
  Py_VISIT(traverse_module_state->__pyx_n_s_typing);
  Py_VISIT(traverse_module_state->__pyx_n_u_unalignedDefinitions);
  Py_VISIT(traverse_module_state->__pyx_n_u_unalignedTactics);
  Py_VISIT(traverse_module_state->__pyx_n_s_unknown_definitions);
  Py_VISIT(traverse_module_state->__pyx_n_s_unknown_tactics);
  Py_VISIT(traverse_module_state->__pyx_n_s_update);
  Py_VISIT(traverse_module_state->__pyx_n_s_which);
  Py_VISIT(traverse_module_state->__pyx_n_s_with_suffix);
  Py_VISIT(traverse_module_state->__pyx_n_s_write_packed);
  Py_VISIT(traverse_module_state->__pyx_float_0_01);
  Py_VISIT(traverse_module_state->__pyx_int_0);
  Py_VISIT(traverse_module_state->__pyx_int_1);
  Py_VISIT(traverse_module_state->__pyx_int_18446744073709551615);
  Py_VISIT(traverse_module_state->__pyx_codeobj_);
  Py_VISIT(traverse_module_state->__pyx_tuple__2);
  Py_VISIT(traverse_module_state->__pyx_tuple__3);
  Py_VISIT(traverse_module_state->__pyx_tuple__7);
  Py_VISIT(traverse_module_state->__pyx_tuple__11);
  Py_VISIT(traverse_module_state->__pyx_tuple__14);
  Py_VISIT(traverse_module_state->__pyx_tuple__16);
  Py_VISIT(traverse_module_state->__pyx_tuple__20);
  Py_VISIT(traverse_module_state->__pyx_tuple__22);
  Py_VISIT(traverse_module_state->__pyx_tuple__28);
  Py_VISIT(traverse_module_state->__pyx_tuple__29);
  Py_VISIT(traverse_module_state->__pyx_tuple__34);
  Py_VISIT(traverse_module_state->__pyx_tuple__35);
  Py_VISIT(traverse_module_state->__pyx_tuple__36);
  Py_VISIT(traverse_module_state->__pyx_tuple__37);
  Py_VISIT(traverse_module_state->__pyx_tuple__39);
  Py_VISIT(traverse_module_state->__pyx_tuple__41);
  Py_VISIT(traverse_module_state->__pyx_tuple__43);
  Py_VISIT(traverse_module_state->__pyx_tuple__44);
  Py_VISIT(traverse_module_state->__pyx_tuple__47);
  Py_VISIT(traverse_module_state->__pyx_tuple__49);
  Py_VISIT(traverse_module_state->__pyx_tuple__51);
  Py_VISIT(traverse_module_state->__pyx_tuple__74);
  Py_VISIT(traverse_module_state->__pyx_tuple__75);
  Py_VISIT(traverse_module_state->__pyx_tuple__77);
  Py_VISIT(traverse_module_state->__pyx_tuple__79);
  Py_VISIT(traverse_module_state->__pyx_tuple__84);
  Py_VISIT(traverse_module_state->__pyx_tuple__86);
  Py_VISIT(traverse_module_state->__pyx_tuple__88);
  Py_VISIT(traverse_module_state->__pyx_tuple__92);
  Py_VISIT(traverse_module_state->__pyx_tuple__94);
  Py_VISIT(traverse_module_state->__pyx_tuple__96);
  Py_VISIT(traverse_module_state->__pyx_tuple__98);
  Py_VISIT(traverse_module_state->__pyx_tuple__99);
  Py_VISIT(traverse_module_state->__pyx_codeobj__4);
  Py_VISIT(traverse_module_state->__pyx_codeobj__9);
  Py_VISIT(traverse_module_state->__pyx_tuple__103);
  Py_VISIT(traverse_module_state->__pyx_tuple__104);
  Py_VISIT(traverse_module_state->__pyx_tuple__106);
  Py_VISIT(traverse_module_state->__pyx_tuple__107);
  Py_VISIT(traverse_module_state->__pyx_tuple__109);
  Py_VISIT(traverse_module_state->__pyx_tuple__110);
  Py_VISIT(traverse_module_state->__pyx_tuple__111);
  Py_VISIT(traverse_module_state->__pyx_tuple__112);
  Py_VISIT(traverse_module_state->__pyx_tuple__113);
  Py_VISIT(traverse_module_state->__pyx_tuple__114);
  Py_VISIT(traverse_module_state->__pyx_tuple__116);
  Py_VISIT(traverse_module_state->__pyx_tuple__117);
  Py_VISIT(traverse_module_state->__pyx_tuple__119);
  Py_VISIT(traverse_module_state->__pyx_tuple__120);
  Py_VISIT(traverse_module_state->__pyx_tuple__122);
  Py_VISIT(traverse_module_state->__pyx_tuple__124);
  Py_VISIT(traverse_module_state->__pyx_tuple__126);
  Py_VISIT(traverse_module_state->__pyx_tuple__128);
  Py_VISIT(traverse_module_state->__pyx_tuple__129);
  Py_VISIT(traverse_module_state->__pyx_tuple__131);
  Py_VISIT(traverse_module_state->__pyx_tuple__132);
  Py_VISIT(traverse_module_state->__pyx_codeobj__12);
  Py_VISIT(traverse_module_state->__pyx_codeobj__13);
  Py_VISIT(traverse_module_state->__pyx_codeobj__15);
  Py_VISIT(traverse_module_state->__pyx_codeobj__17);
  Py_VISIT(traverse_module_state->__pyx_codeobj__18);
  Py_VISIT(traverse_module_state->__pyx_codeobj__19);
  Py_VISIT(traverse_module_state->__pyx_codeobj__21);
  Py_VISIT(traverse_module_state->__pyx_codeobj__23);
  Py_VISIT(traverse_module_state->__pyx_codeobj__24);
  Py_VISIT(traverse_module_state->__pyx_codeobj__26);
  Py_VISIT(traverse_module_state->__pyx_codeobj__27);
  Py_VISIT(traverse_module_state->__pyx_codeobj__30);
  Py_VISIT(traverse_module_state->__pyx_codeobj__32);
  Py_VISIT(traverse_module_state->__pyx_codeobj__38);
  Py_VISIT(traverse_module_state->__pyx_codeobj__40);
  Py_VISIT(traverse_module_state->__pyx_codeobj__42);
  Py_VISIT(traverse_module_state->__pyx_codeobj__45);
  Py_VISIT(traverse_module_state->__pyx_codeobj__46);
  Py_VISIT(traverse_module_state->__pyx_codeobj__48);
  Py_VISIT(traverse_module_state->__pyx_codeobj__50);
  Py_VISIT(traverse_module_state->__pyx_codeobj__52);
  Py_VISIT(traverse_module_state->__pyx_codeobj__53);
  Py_VISIT(traverse_module_state->__pyx_codeobj__54);
  Py_VISIT(traverse_module_state->__pyx_codeobj__55);
  Py_VISIT(traverse_module_state->__pyx_codeobj__56);
  Py_VISIT(traverse_module_state->__pyx_codeobj__57);
  Py_VISIT(traverse_module_state->__pyx_codeobj__58);
  Py_VISIT(traverse_module_state->__pyx_codeobj__59);
  Py_VISIT(traverse_module_state->__pyx_codeobj__60);
  Py_VISIT(traverse_module_state->__pyx_codeobj__61);
  Py_VISIT(traverse_module_state->__pyx_codeobj__62);
  Py_VISIT(traverse_module_state->__pyx_codeobj__63);
  Py_VISIT(traverse_module_state->__pyx_codeobj__64);
  Py_VISIT(traverse_module_state->__pyx_codeobj__65);
  Py_VISIT(traverse_module_state->__pyx_codeobj__66);
  Py_VISIT(traverse_module_state->__pyx_codeobj__67);
  Py_VISIT(traverse_module_state->__pyx_codeobj__68);
  Py_VISIT(traverse_module_state->__pyx_codeobj__69);
  Py_VISIT(traverse_module_state->__pyx_codeobj__70);
  Py_VISIT(traverse_module_state->__pyx_codeobj__71);
  Py_VISIT(traverse_module_state->__pyx_codeobj__72);
  Py_VISIT(traverse_module_state->__pyx_codeobj__73);
  Py_VISIT(traverse_module_state->__pyx_codeobj__76);
  Py_VISIT(traverse_module_state->__pyx_codeobj__78);
  Py_VISIT(traverse_module_state->__pyx_codeobj__80);
  Py_VISIT(traverse_module_state->__pyx_codeobj__81);
  Py_VISIT(traverse_module_state->__pyx_codeobj__82);
  Py_VISIT(traverse_module_state->__pyx_codeobj__83);
  Py_VISIT(traverse_module_state->__pyx_codeobj__85);
  Py_VISIT(traverse_module_state->__pyx_codeobj__87);
  Py_VISIT(traverse_module_state->__pyx_codeobj__89);
  Py_VISIT(traverse_module_state->__pyx_codeobj__90);
  Py_VISIT(traverse_module_state->__pyx_codeobj__91);
  Py_VISIT(traverse_module_state->__pyx_codeobj__93);
  Py_VISIT(traverse_module_state->__pyx_codeobj__95);
  Py_VISIT(traverse_module_state->__pyx_codeobj__97);
  Py_VISIT(traverse_module_state->__pyx_codeobj__100);
  Py_VISIT(traverse_module_state->__pyx_codeobj__101);
  Py_VISIT(traverse_module_state->__pyx_codeobj__102);
  Py_VISIT(traverse_module_state->__pyx_codeobj__105);
  Py_VISIT(traverse_module_state->__pyx_codeobj__108);
  Py_VISIT(traverse_module_state->__pyx_codeobj__115);
  Py_VISIT(traverse_module_state->__pyx_codeobj__118);
  Py_VISIT(traverse_module_state->__pyx_codeobj__121);
  Py_VISIT(traverse_module_state->__pyx_codeobj__123);
  Py_VISIT(traverse_module_state->__pyx_codeobj__125);
  Py_VISIT(traverse_module_state->__pyx_codeobj__127);
  Py_VISIT(traverse_module_state->__pyx_codeobj__130);
  Py_VISIT(traverse_module_state->__pyx_codeobj__133);
  return 0;
}
#endif
/* #### Code section: module_state_defines ### */
#if CYTHON_USE_MODULE_STATE
#define __pyx_d __pyx_mstate_global->__pyx_d
#define __pyx_b __pyx_mstate_global->__pyx_b
#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime
#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple
#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes
#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode
#ifdef __Pyx_CyFunction_USED
#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType
#endif
#ifdef __Pyx_FusedFunction_USED
#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType
#endif
#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type
#define __pyx_ptype_5capnp_3lib_5capnp__StructSchemaField __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__StructSchemaField
#define __pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr
#define __pyx_ptype_5capnp_3lib_5capnp_SchemaParser __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp_SchemaParser
#define __pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan
#define __pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader
#define __pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder
#define __pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField
#define __pyx_ptype_5capnp_3lib_5capnp__Schema __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__Schema
#define __pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema
#define __pyx_ptype_5capnp_3lib_5capnp__DynamicEnum __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__DynamicEnum
#define __pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder
#define __pyx_ptype_5capnp_3lib_5capnp__MessageBuilder __pyx_mstate_global->__pyx_ptype_5capnp_3lib_5capnp__MessageBuilder
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_String_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_String_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List
#define __pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List __pyx_mstate_global->__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List
#define __pyx_ptype_6pytact_11data_reader_LowlevelDataReader __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_LowlevelDataReader
#define __pyx_type_6pytact_11data_reader_LowlevelDataReader __pyx_mstate_global->__pyx_type_6pytact_11data_reader_LowlevelDataReader
#define __pyx_ptype_6pytact_11data_reader_Node __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Node
#define __pyx_type_6pytact_11data_reader_Node __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Node
#define __pyx_ptype_6pytact_11data_reader_EdgeTarget_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_EdgeTarget_List
#define __pyx_type_6pytact_11data_reader_EdgeTarget_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_EdgeTarget_List
#define __pyx_ptype_6pytact_11data_reader_Node_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Node_List
#define __pyx_type_6pytact_11data_reader_Node_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Node_List
#define __pyx_ptype_6pytact_11data_reader_ProofState __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_ProofState
#define __pyx_type_6pytact_11data_reader_ProofState __pyx_mstate_global->__pyx_type_6pytact_11data_reader_ProofState
#define __pyx_ptype_6pytact_11data_reader_ProofState_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_ProofState_List
#define __pyx_type_6pytact_11data_reader_ProofState_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_ProofState_List
#define __pyx_ptype_6pytact_11data_reader_Argument_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Argument_List
#define __pyx_type_6pytact_11data_reader_Argument_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Argument_List
#define __pyx_ptype_6pytact_11data_reader_Outcome __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Outcome
#define __pyx_type_6pytact_11data_reader_Outcome __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Outcome
#define __pyx_ptype_6pytact_11data_reader_Outcome_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Outcome_List
#define __pyx_type_6pytact_11data_reader_Outcome_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Outcome_List
#define __pyx_ptype_6pytact_11data_reader_ProofStep __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_ProofStep
#define __pyx_type_6pytact_11data_reader_ProofStep __pyx_mstate_global->__pyx_type_6pytact_11data_reader_ProofStep
#define __pyx_ptype_6pytact_11data_reader_ProofStep_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_ProofStep_List
#define __pyx_type_6pytact_11data_reader_ProofStep_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_ProofStep_List
#define __pyx_ptype_6pytact_11data_reader_Representative_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Representative_List
#define __pyx_type_6pytact_11data_reader_Representative_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Representative_List
#define __pyx_ptype_6pytact_11data_reader_Definition __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Definition
#define __pyx_type_6pytact_11data_reader_Definition __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Definition
#define __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List
#define __pyx_type_6pytact_11data_reader_Dataset_Definition_List __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Dataset_Definition_List
#define __pyx_ptype_6pytact_11data_reader_Dataset __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_Dataset
#define __pyx_type_6pytact_11data_reader_Dataset __pyx_mstate_global->__pyx_type_6pytact_11data_reader_Dataset
#define __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader
#define __pyx_type_6pytact_11data_reader_OnlineDefinitionsReader __pyx_mstate_global->__pyx_type_6pytact_11data_reader_OnlineDefinitionsReader
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__ __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get__ __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get__
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__ __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get__ __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get__
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context
#define __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context __pyx_mstate_global->__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context
#define __pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context __pyx_mstate_global->__pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context
#define __pyx_n_s_ACCESS_READ __pyx_mstate_global->__pyx_n_s_ACCESS_READ
#define __pyx_n_s_Any __pyx_mstate_global->__pyx_n_s_Any
#define __pyx_n_s_Argument_List __pyx_mstate_global->__pyx_n_s_Argument_List
#define __pyx_n_s_Argument_List___reduce_cython __pyx_mstate_global->__pyx_n_s_Argument_List___reduce_cython
#define __pyx_n_s_Argument_List___setstate_cython __pyx_mstate_global->__pyx_n_s_Argument_List___setstate_cython
#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError
#define __pyx_n_s_BinaryIO __pyx_mstate_global->__pyx_n_s_BinaryIO
#define __pyx_kp_s_BinaryIO_None __pyx_mstate_global->__pyx_kp_s_BinaryIO_None
#define __pyx_n_s_Callable __pyx_mstate_global->__pyx_n_s_Callable
#define __pyx_kp_s_Callable_Definition_bool __pyx_mstate_global->__pyx_kp_s_Callable_Definition_bool
#define __pyx_kp_s_Callable_int_T __pyx_mstate_global->__pyx_kp_s_Callable_int_T
#define __pyx_kp_u_Capnp_protocol_error __pyx_mstate_global->__pyx_kp_u_Capnp_protocol_error
#define __pyx_n_s_CheckAlignmentMessage __pyx_mstate_global->__pyx_n_s_CheckAlignmentMessage
#define __pyx_n_s_CheckAlignmentResponse __pyx_mstate_global->__pyx_n_s_CheckAlignmentResponse
#define __pyx_n_s_Constructor __pyx_mstate_global->__pyx_n_s_Constructor
#define __pyx_n_s_Dataset __pyx_mstate_global->__pyx_n_s_Dataset
#define __pyx_n_s_Dataset_Definition_List __pyx_mstate_global->__pyx_n_s_Dataset_Definition_List
#define __pyx_n_s_Dataset_Definition_List___reduce __pyx_mstate_global->__pyx_n_s_Dataset_Definition_List___reduce
#define __pyx_n_s_Dataset_Definition_List___setsta __pyx_mstate_global->__pyx_n_s_Dataset_Definition_List___setsta
#define __pyx_n_s_Dataset_Reader __pyx_mstate_global->__pyx_n_s_Dataset_Reader
#define __pyx_n_s_Dataset___get___locals_get __pyx_mstate_global->__pyx_n_s_Dataset___get___locals_get
#define __pyx_n_s_Dataset___reduce_cython __pyx_mstate_global->__pyx_n_s_Dataset___reduce_cython
#define __pyx_n_s_Dataset___setstate_cython __pyx_mstate_global->__pyx_n_s_Dataset___setstate_cython
#define __pyx_n_s_Dataset_clustered_definitions __pyx_mstate_global->__pyx_n_s_Dataset_clustered_definitions
#define __pyx_n_s_Dataset_definitions __pyx_mstate_global->__pyx_n_s_Dataset_definitions
#define __pyx_kp_u_Dataset_does_not_exist __pyx_mstate_global->__pyx_kp_u_Dataset_does_not_exist
#define __pyx_n_s_Dataset_node_by_id __pyx_mstate_global->__pyx_n_s_Dataset_node_by_id
#define __pyx_n_s_Definition __pyx_mstate_global->__pyx_n_s_Definition
#define __pyx_n_s_Definition___get __pyx_mstate_global->__pyx_n_s_Definition___get
#define __pyx_n_s_Definition___reduce_cython __pyx_mstate_global->__pyx_n_s_Definition___reduce_cython
#define __pyx_n_s_Definition___setstate_cython __pyx_mstate_global->__pyx_n_s_Definition___setstate_cython
#define __pyx_n_s_Definition__global_context __pyx_mstate_global->__pyx_n_s_Definition__global_context
#define __pyx_n_s_Definition__group_by_clusters __pyx_mstate_global->__pyx_n_s_Definition__group_by_clusters
#define __pyx_n_s_Definition_clustered_global_cont __pyx_mstate_global->__pyx_n_s_Definition_clustered_global_cont
#define __pyx_n_s_Definition_global_context __pyx_mstate_global->__pyx_n_s_Definition_global_context
#define __pyx_n_s_Discharged __pyx_mstate_global->__pyx_n_s_Discharged
#define __pyx_n_s_EdgeTarget_List __pyx_mstate_global->__pyx_n_s_EdgeTarget_List
#define __pyx_n_s_EdgeTarget_List___reduce_cython __pyx_mstate_global->__pyx_n_s_EdgeTarget_List___reduce_cython
#define __pyx_n_s_EdgeTarget_List___setstate_cytho __pyx_mstate_global->__pyx_n_s_EdgeTarget_List___setstate_cytho
#define __pyx_n_s_ExitStack __pyx_mstate_global->__pyx_n_s_ExitStack
#define __pyx_n_s_Generator __pyx_mstate_global->__pyx_n_s_Generator
#define __pyx_kp_s_Generator_Any_None_None __pyx_mstate_global->__pyx_kp_s_Generator_Any_None_None
#define __pyx_kp_s_Generator_GlobalContextMessage_P __pyx_mstate_global->__pyx_kp_s_Generator_GlobalContextMessage_P
#define __pyx_kp_s_Generator_GlobalContextSets_None __pyx_mstate_global->__pyx_kp_s_Generator_GlobalContextSets_None
#define __pyx_kp_s_Generator_LowlevelDataReader_Non __pyx_mstate_global->__pyx_kp_s_Generator_LowlevelDataReader_Non
#define __pyx_kp_s_Generator_OnlineDefinitionsReade __pyx_mstate_global->__pyx_kp_s_Generator_OnlineDefinitionsReade
#define __pyx_kp_s_Generator_ProofState_None_None __pyx_mstate_global->__pyx_kp_s_Generator_ProofState_None_None
#define __pyx_kp_s_Generator_dict_Path_Dataset_None __pyx_mstate_global->__pyx_kp_s_Generator_dict_Path_Dataset_None
#define __pyx_kp_s_Generator_pytact_graph_api_capnp __pyx_mstate_global->__pyx_kp_s_Generator_pytact_graph_api_capnp
#define __pyx_n_s_GlobalContextMessage __pyx_mstate_global->__pyx_n_s_GlobalContextMessage
#define __pyx_n_s_GlobalContextSets __pyx_mstate_global->__pyx_n_s_GlobalContextSets
#define __pyx_kp_s_GlobalContextSets_None __pyx_mstate_global->__pyx_kp_s_GlobalContextSets_None
#define __pyx_n_s_GlobalContextSets___init __pyx_mstate_global->__pyx_n_s_GlobalContextSets___init
#define __pyx_n_s_GlobalContextSets__global_contex __pyx_mstate_global->__pyx_n_s_GlobalContextSets__global_contex
#define __pyx_n_s_GlobalContextSets__propagate __pyx_mstate_global->__pyx_n_s_GlobalContextSets__propagate
#define __pyx_n_s_GlobalContextSets_global_context __pyx_mstate_global->__pyx_n_s_GlobalContextSets_global_context
#define __pyx_n_s_GlobalContextSets_new_context __pyx_mstate_global->__pyx_n_s_GlobalContextSets_new_context
#define __pyx_n_s_GlobalContextSets_new_context_lo __pyx_mstate_global->__pyx_n_s_GlobalContextSets_new_context_lo
#define __pyx_n_s_GlobalContextSets_sub_context __pyx_mstate_global->__pyx_n_s_GlobalContextSets_sub_context
#define __pyx_kp_u_Incorrect_predictions_received __pyx_mstate_global->__pyx_kp_u_Incorrect_predictions_received
#define __pyx_n_s_IndexError __pyx_mstate_global->__pyx_n_s_IndexError
#define __pyx_n_s_Inductive __pyx_mstate_global->__pyx_n_s_Inductive
#define __pyx_n_s_Iterable __pyx_mstate_global->__pyx_n_s_Iterable
#define __pyx_kp_s_Iterable_Definition __pyx_mstate_global->__pyx_kp_s_Iterable_Definition
#define __pyx_kp_s_Iterable_list_Definition __pyx_mstate_global->__pyx_kp_s_Iterable_list_Definition
#define __pyx_n_s_KeyError __pyx_mstate_global->__pyx_n_s_KeyError
#define __pyx_kp_s_Lazily_retrieve_a_the_global_con __pyx_mstate_global->__pyx_kp_s_Lazily_retrieve_a_the_global_con
#define __pyx_n_s_LowlevelDataReader __pyx_mstate_global->__pyx_n_s_LowlevelDataReader
#define __pyx_n_s_LowlevelDataReader___reduce_cyth __pyx_mstate_global->__pyx_n_s_LowlevelDataReader___reduce_cyth
#define __pyx_n_s_LowlevelDataReader___setstate_cy __pyx_mstate_global->__pyx_n_s_LowlevelDataReader___setstate_cy
#define __pyx_n_s_LowlevelDataReader_local_to_glob __pyx_mstate_global->__pyx_n_s_LowlevelDataReader_local_to_glob
#define __pyx_n_s_ManualConstant __pyx_mstate_global->__pyx_n_s_ManualConstant
#define __pyx_n_s_ManualSectionConstant __pyx_mstate_global->__pyx_n_s_ManualSectionConstant
#define __pyx_n_s_Map __pyx_mstate_global->__pyx_n_s_Map
#define __pyx_n_s_MemoryError __pyx_mstate_global->__pyx_n_s_MemoryError
#define __pyx_kp_u_Mount_did_not_appear __pyx_mstate_global->__pyx_kp_u_Mount_did_not_appear
#define __pyx_n_s_Node __pyx_mstate_global->__pyx_n_s_Node
#define __pyx_n_s_NodeHash __pyx_mstate_global->__pyx_n_s_NodeHash
#define __pyx_n_s_NodeId __pyx_mstate_global->__pyx_n_s_NodeId
#define __pyx_n_s_Node_List __pyx_mstate_global->__pyx_n_s_Node_List
#define __pyx_n_s_Node_List___reduce_cython __pyx_mstate_global->__pyx_n_s_Node_List___reduce_cython
#define __pyx_n_s_Node_List___setstate_cython __pyx_mstate_global->__pyx_n_s_Node_List___setstate_cython
#define __pyx_n_s_Node___reduce_cython __pyx_mstate_global->__pyx_n_s_Node___reduce_cython
#define __pyx_n_s_Node___setstate_cython __pyx_mstate_global->__pyx_n_s_Node___setstate_cython
#define __pyx_kp_u_Not_all_prediction_requests_were __pyx_mstate_global->__pyx_kp_u_Not_all_prediction_requests_were
#define __pyx_n_s_OnlineDefinitionsReader __pyx_mstate_global->__pyx_n_s_OnlineDefinitionsReader
#define __pyx_n_s_OnlineDefinitionsReader___reduce __pyx_mstate_global->__pyx_n_s_OnlineDefinitionsReader___reduce
#define __pyx_n_s_OnlineDefinitionsReader___setsta __pyx_mstate_global->__pyx_n_s_OnlineDefinitionsReader___setsta
#define __pyx_n_s_OnlineDefinitionsReader_clustere __pyx_mstate_global->__pyx_n_s_OnlineDefinitionsReader_clustere
#define __pyx_n_s_OnlineDefinitionsReader_definiti __pyx_mstate_global->__pyx_n_s_OnlineDefinitionsReader_definiti
#define __pyx_n_s_OnlineDefinitionsReader_local_to __pyx_mstate_global->__pyx_n_s_OnlineDefinitionsReader_local_to
#define __pyx_kp_u_Options_across_files_True_and_sp __pyx_mstate_global->__pyx_kp_u_Options_across_files_True_and_sp
#define __pyx_n_s_Original __pyx_mstate_global->__pyx_n_s_Original
#define __pyx_kp_u_Out_of_bounds __pyx_mstate_global->__pyx_kp_u_Out_of_bounds
#define __pyx_n_s_Outcome __pyx_mstate_global->__pyx_n_s_Outcome
#define __pyx_n_s_Outcome_List __pyx_mstate_global->__pyx_n_s_Outcome_List
#define __pyx_n_s_Outcome_List___reduce_cython __pyx_mstate_global->__pyx_n_s_Outcome_List___reduce_cython
#define __pyx_n_s_Outcome_List___setstate_cython __pyx_mstate_global->__pyx_n_s_Outcome_List___setstate_cython
#define __pyx_n_s_Outcome___reduce_cython __pyx_mstate_global->__pyx_n_s_Outcome___reduce_cython
#define __pyx_n_s_Outcome___setstate_cython __pyx_mstate_global->__pyx_n_s_Outcome___setstate_cython
#define __pyx_n_s_PIPE __pyx_mstate_global->__pyx_n_s_PIPE
#define __pyx_n_s_Path __pyx_mstate_global->__pyx_n_s_Path
#define __pyx_kp_u_Path_2 __pyx_mstate_global->__pyx_kp_u_Path_2
#define __pyx_n_s_PredictionProtocol __pyx_mstate_global->__pyx_n_s_PredictionProtocol
#define __pyx_n_s_Projection __pyx_mstate_global->__pyx_n_s_Projection
#define __pyx_n_s_ProofState __pyx_mstate_global->__pyx_n_s_ProofState
#define __pyx_n_s_ProofStateId __pyx_mstate_global->__pyx_n_s_ProofStateId
#define __pyx_n_s_ProofState_List __pyx_mstate_global->__pyx_n_s_ProofState_List
#define __pyx_n_s_ProofState_List___reduce_cython __pyx_mstate_global->__pyx_n_s_ProofState_List___reduce_cython
#define __pyx_n_s_ProofState_List___setstate_cytho __pyx_mstate_global->__pyx_n_s_ProofState_List___setstate_cytho
#define __pyx_n_s_ProofState___reduce_cython __pyx_mstate_global->__pyx_n_s_ProofState___reduce_cython
#define __pyx_n_s_ProofState___setstate_cython __pyx_mstate_global->__pyx_n_s_ProofState___setstate_cython
#define __pyx_n_s_ProofStep __pyx_mstate_global->__pyx_n_s_ProofStep
#define __pyx_n_s_ProofStep_List __pyx_mstate_global->__pyx_n_s_ProofStep_List
#define __pyx_n_s_ProofStep_List___reduce_cython __pyx_mstate_global->__pyx_n_s_ProofStep_List___reduce_cython
#define __pyx_n_s_ProofStep_List___setstate_cython __pyx_mstate_global->__pyx_n_s_ProofStep_List___setstate_cython
#define __pyx_n_s_ProofStep___reduce_cython __pyx_mstate_global->__pyx_n_s_ProofStep___reduce_cython
#define __pyx_n_s_ProofStep___setstate_cython __pyx_mstate_global->__pyx_n_s_ProofStep___setstate_cython
#define __pyx_n_s_RLIMIT_NOFILE __pyx_mstate_global->__pyx_n_s_RLIMIT_NOFILE
#define __pyx_n_s_Representative_List __pyx_mstate_global->__pyx_n_s_Representative_List
#define __pyx_n_s_Representative_List___reduce_cyt __pyx_mstate_global->__pyx_n_s_Representative_List___reduce_cyt
#define __pyx_n_s_Representative_List___setstate_c __pyx_mstate_global->__pyx_n_s_Representative_List___setstate_c
#define __pyx_n_s_Request __pyx_mstate_global->__pyx_n_s_Request
#define __pyx_n_s_Response __pyx_mstate_global->__pyx_n_s_Response
#define __pyx_n_s_SIGINT __pyx_mstate_global->__pyx_n_s_SIGINT
#define __pyx_n_s_SIG_DFL __pyx_mstate_global->__pyx_n_s_SIG_DFL
#define __pyx_n_s_Sequence __pyx_mstate_global->__pyx_n_s_Sequence
#define __pyx_kp_s_Sequence_ProofStep __pyx_mstate_global->__pyx_kp_s_Sequence_ProofStep
#define __pyx_kp_u_Servers_response __pyx_mstate_global->__pyx_kp_u_Servers_response
#define __pyx_kp_u_Squashfuse_error __pyx_mstate_global->__pyx_kp_u_Squashfuse_error
#define __pyx_n_s_StopIteration __pyx_mstate_global->__pyx_n_s_StopIteration
#define __pyx_n_s_Substituted __pyx_mstate_global->__pyx_n_s_Substituted
#define __pyx_n_s_T __pyx_mstate_global->__pyx_n_s_T
#define __pyx_n_u_T __pyx_mstate_global->__pyx_n_u_T
#define __pyx_n_s_TacticId __pyx_mstate_global->__pyx_n_s_TacticId
#define __pyx_n_s_TacticPredictionGraph __pyx_mstate_global->__pyx_n_s_TacticPredictionGraph
#define __pyx_n_s_TacticPredictionText __pyx_mstate_global->__pyx_n_s_TacticPredictionText
#define __pyx_n_s_TacticPredictionsGraph __pyx_mstate_global->__pyx_n_s_TacticPredictionsGraph
#define __pyx_n_s_TacticPredictionsText __pyx_mstate_global->__pyx_n_s_TacticPredictionsText
#define __pyx_n_s_TacticalConstant __pyx_mstate_global->__pyx_n_s_TacticalConstant
#define __pyx_n_s_TacticalSectionConstant __pyx_mstate_global->__pyx_n_s_TacticalSectionConstant
#define __pyx_kp_u_The_servers_response_to_a __pyx_mstate_global->__pyx_kp_u_The_servers_response_to_a
#define __pyx_kp_u_There_does_not_appear_to_be_a_da __pyx_mstate_global->__pyx_kp_u_There_does_not_appear_to_be_a_da
#define __pyx_kp_u_This_library_is_compiled_for_a_d __pyx_mstate_global->__pyx_kp_u_This_library_is_compiled_for_a_d
#define __pyx_n_s_TupleLike __pyx_mstate_global->__pyx_n_s_TupleLike
#define __pyx_n_s_TupleLike___getitem __pyx_mstate_global->__pyx_n_s_TupleLike___getitem
#define __pyx_n_s_TupleLike___init __pyx_mstate_global->__pyx_n_s_TupleLike___init
#define __pyx_n_s_TupleLike___len __pyx_mstate_global->__pyx_n_s_TupleLike___len
#define __pyx_n_s_TypeAlias __pyx_mstate_global->__pyx_n_s_TypeAlias
#define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError
#define __pyx_n_s_TypeVar __pyx_mstate_global->__pyx_n_s_TypeVar
#define __pyx_kp_u_Unable_to_mount_dataset __pyx_mstate_global->__pyx_kp_u_Unable_to_mount_dataset
#define __pyx_kp_u_Unable_to_mount_dataset_Executab __pyx_mstate_global->__pyx_kp_u_Unable_to_mount_dataset_Executab
#define __pyx_kp_u_Unable_to_mount_dataset_Mountpoi __pyx_mstate_global->__pyx_kp_u_Unable_to_mount_dataset_Mountpoi
#define __pyx_kp_u_Unable_to_mount_dataset_Squashfu __pyx_mstate_global->__pyx_kp_u_Unable_to_mount_dataset_Squashfu
#define __pyx_n_s_Union __pyx_mstate_global->__pyx_n_s_Union
#define __pyx_n_s_Unknown __pyx_mstate_global->__pyx_n_s_Unknown
#define __pyx_n_s_Unresolvable __pyx_mstate_global->__pyx_n_s_Unresolvable
#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError
#define __pyx_kp_u__10 __pyx_mstate_global->__pyx_kp_u__10
#define __pyx_n_s__134 __pyx_mstate_global->__pyx_n_s__134
#define __pyx_kp_u__25 __pyx_mstate_global->__pyx_kp_u__25
#define __pyx_n_s__31 __pyx_mstate_global->__pyx_n_s__31
#define __pyx_n_s__33 __pyx_mstate_global->__pyx_n_s__33
#define __pyx_kp_u__5 __pyx_mstate_global->__pyx_kp_u__5
#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6
#define __pyx_kp_u__8 __pyx_mstate_global->__pyx_kp_u__8
#define __pyx_n_s_a __pyx_mstate_global->__pyx_n_s_a
#define __pyx_n_s_access __pyx_mstate_global->__pyx_n_s_access
#define __pyx_n_s_across_files __pyx_mstate_global->__pyx_n_s_across_files
#define __pyx_n_s_add __pyx_mstate_global->__pyx_n_s_add
#define __pyx_n_s_alignment __pyx_mstate_global->__pyx_n_s_alignment
#define __pyx_n_s_annotations __pyx_mstate_global->__pyx_n_s_annotations
#define __pyx_n_s_apic __pyx_mstate_global->__pyx_n_s_apic
#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args
#define __pyx_n_s_arguments __pyx_mstate_global->__pyx_n_s_arguments
#define __pyx_n_u_arguments __pyx_mstate_global->__pyx_n_u_arguments
#define __pyx_n_s_as_builder __pyx_mstate_global->__pyx_n_s_as_builder
#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines
#define __pyx_n_s_base __pyx_mstate_global->__pyx_n_s_base
#define __pyx_kp_u_bin __pyx_mstate_global->__pyx_kp_u_bin
#define __pyx_n_s_bool __pyx_mstate_global->__pyx_n_s_bool
#define __pyx_kp_u_but_file __pyx_mstate_global->__pyx_kp_u_but_file
#define __pyx_kp_u_but_file_Coq_sent_a_message_ver __pyx_mstate_global->__pyx_kp_u_but_file_Coq_sent_a_message_ver
#define __pyx_n_s_c __pyx_mstate_global->__pyx_n_s_c
#define __pyx_n_s_cache __pyx_mstate_global->__pyx_n_s_cache
#define __pyx_n_s_capnp __pyx_mstate_global->__pyx_n_s_capnp
#define __pyx_n_s_capnp_message_generator __pyx_mstate_global->__pyx_n_s_capnp_message_generator
#define __pyx_n_s_capnp_message_generator_from_fil __pyx_mstate_global->__pyx_n_s_capnp_message_generator_from_fil
#define __pyx_n_s_capnp_message_generator_from_fil_2 __pyx_mstate_global->__pyx_n_s_capnp_message_generator_from_fil_2
#define __pyx_n_s_capnp_message_generator_lowlevel __pyx_mstate_global->__pyx_n_s_capnp_message_generator_lowlevel
#define __pyx_n_s_capnp_message_generator_lowlevel_2 __pyx_mstate_global->__pyx_n_s_capnp_message_generator_lowlevel_2
#define __pyx_n_s_cast __pyx_mstate_global->__pyx_n_s_cast
#define __pyx_n_s_check __pyx_mstate_global->__pyx_n_s_check
#define __pyx_n_s_child __pyx_mstate_global->__pyx_n_s_child
#define __pyx_n_s_child_graph __pyx_mstate_global->__pyx_n_s_child_graph
#define __pyx_n_s_children __pyx_mstate_global->__pyx_n_s_children
#define __pyx_n_s_children_index __pyx_mstate_global->__pyx_n_s_children_index
#define __pyx_n_s_children_limit __pyx_mstate_global->__pyx_n_s_children_limit
#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem
#define __pyx_n_s_clear_write_flag __pyx_mstate_global->__pyx_n_s_clear_write_flag
#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback
#define __pyx_n_s_close __pyx_mstate_global->__pyx_n_s_close
#define __pyx_n_s_cls __pyx_mstate_global->__pyx_n_s_cls
#define __pyx_n_s_cluster __pyx_mstate_global->__pyx_n_s_cluster
#define __pyx_n_s_cluster_representative __pyx_mstate_global->__pyx_n_s_cluster_representative
#define __pyx_n_s_clustered_definitions __pyx_mstate_global->__pyx_n_s_clustered_definitions
#define __pyx_n_s_clustered_global_context __pyx_mstate_global->__pyx_n_s_clustered_global_context
#define __pyx_n_s_collections_abc __pyx_mstate_global->__pyx_n_s_collections_abc
#define __pyx_n_s_confidence __pyx_mstate_global->__pyx_n_s_confidence
#define __pyx_n_u_confidence __pyx_mstate_global->__pyx_n_u_confidence
#define __pyx_kp_u_contains_data_versioned_as __pyx_mstate_global->__pyx_kp_u_contains_data_versioned_as
#define __pyx_n_s_context __pyx_mstate_global->__pyx_n_s_context
#define __pyx_n_s_contextlib __pyx_mstate_global->__pyx_n_s_contextlib
#define __pyx_n_s_contextmanager __pyx_mstate_global->__pyx_n_s_contextmanager
#define __pyx_n_s_convert_predictions __pyx_mstate_global->__pyx_n_s_convert_predictions
#define __pyx_n_s_count __pyx_mstate_global->__pyx_n_s_count
#define __pyx_n_s_count_2 __pyx_mstate_global->__pyx_n_s_count_2
#define __pyx_n_s_create_mmap __pyx_mstate_global->__pyx_n_s_create_mmap
#define __pyx_n_s_currentVersion __pyx_mstate_global->__pyx_n_s_currentVersion
#define __pyx_n_s_current_node __pyx_mstate_global->__pyx_n_s_current_node
#define __pyx_n_s_current_thread __pyx_mstate_global->__pyx_n_s_current_thread
#define __pyx_n_s_cython_msg __pyx_mstate_global->__pyx_n_s_cython_msg
#define __pyx_n_s_d __pyx_mstate_global->__pyx_n_s_d
#define __pyx_n_s_data_reader __pyx_mstate_global->__pyx_n_s_data_reader
#define __pyx_n_s_data_version __pyx_mstate_global->__pyx_n_s_data_version
#define __pyx_n_s_dataclass __pyx_mstate_global->__pyx_n_s_dataclass
#define __pyx_n_s_dataclasses __pyx_mstate_global->__pyx_n_s_dataclasses
#define __pyx_n_s_dataset __pyx_mstate_global->__pyx_n_s_dataset
#define __pyx_n_s_dataset_path __pyx_mstate_global->__pyx_n_s_dataset_path
#define __pyx_n_s_decode __pyx_mstate_global->__pyx_n_s_decode
#define __pyx_n_s_definition __pyx_mstate_global->__pyx_n_s_definition
#define __pyx_n_s_definition_dependencies __pyx_mstate_global->__pyx_n_s_definition_dependencies
#define __pyx_n_s_definitions __pyx_mstate_global->__pyx_n_s_definitions
#define __pyx_n_s_definitions_it __pyx_mstate_global->__pyx_n_s_definitions_it
#define __pyx_n_s_defs __pyx_mstate_global->__pyx_n_s_defs
#define __pyx_n_u_depIndex __pyx_mstate_global->__pyx_n_u_depIndex
#define __pyx_n_s_dep_index __pyx_mstate_global->__pyx_n_s_dep_index
#define __pyx_n_s_dependencies __pyx_mstate_global->__pyx_n_s_dependencies
#define __pyx_n_s_deps __pyx_mstate_global->__pyx_n_s_deps
#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict
#define __pyx_kp_s_dict_Path_Dataset __pyx_mstate_global->__pyx_kp_s_dict_Path_Dataset
#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable
#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc
#define __pyx_kp_u_doesn_t_appear_to_be_the_root_o __pyx_mstate_global->__pyx_kp_u_doesn_t_appear_to_be_the_root_o
#define __pyx_n_s_dr __pyx_mstate_global->__pyx_n_s_dr
#define __pyx_n_s_edge_target __pyx_mstate_global->__pyx_n_s_edge_target
#define __pyx_n_s_edges __pyx_mstate_global->__pyx_n_s_edges
#define __pyx_n_s_empty_online_definitions_initial __pyx_mstate_global->__pyx_n_s_empty_online_definitions_initial
#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable
#define __pyx_n_s_enter __pyx_mstate_global->__pyx_n_s_enter
#define __pyx_n_s_enter_context __pyx_mstate_global->__pyx_n_s_enter_context
#define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate
#define __pyx_n_s_ep __pyx_mstate_global->__pyx_n_s_ep
#define __pyx_n_s_eprev __pyx_mstate_global->__pyx_n_s_eprev
#define __pyx_n_s_exists __pyx_mstate_global->__pyx_n_s_exists
#define __pyx_n_s_exit __pyx_mstate_global->__pyx_n_s_exit
#define __pyx_n_s_external_previous __pyx_mstate_global->__pyx_n_s_external_previous
#define __pyx_n_s_f __pyx_mstate_global->__pyx_n_s_f
#define __pyx_n_s_file_dataset_reader __pyx_mstate_global->__pyx_n_s_file_dataset_reader
#define __pyx_n_s_file_dataset_reader_locals_creat __pyx_mstate_global->__pyx_n_s_file_dataset_reader_locals_creat
#define __pyx_n_s_fileno __pyx_mstate_global->__pyx_n_s_fileno
#define __pyx_n_s_float __pyx_mstate_global->__pyx_n_s_float
#define __pyx_n_s_fname __pyx_mstate_global->__pyx_n_s_fname
#define __pyx_n_s_fnames __pyx_mstate_global->__pyx_n_s_fnames
#define __pyx_n_s_from_bytes __pyx_mstate_global->__pyx_n_s_from_bytes
#define __pyx_n_s_full __pyx_mstate_global->__pyx_n_s_full
#define __pyx_n_s_g __pyx_mstate_global->__pyx_n_s_g
#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc
#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get
#define __pyx_n_s_get_2 __pyx_mstate_global->__pyx_n_s_get_2
#define __pyx_n_s_getitem __pyx_mstate_global->__pyx_n_s_getitem
#define __pyx_n_s_getrlimit __pyx_mstate_global->__pyx_n_s_getrlimit
#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate
#define __pyx_n_s_glob __pyx_mstate_global->__pyx_n_s_glob
#define __pyx_n_s_global_context __pyx_mstate_global->__pyx_n_s_global_context
#define __pyx_n_s_global_context_2 __pyx_mstate_global->__pyx_n_s_global_context_2
#define __pyx_n_s_global_context_set __pyx_mstate_global->__pyx_n_s_global_context_set
#define __pyx_n_s_global_context_set_2 __pyx_mstate_global->__pyx_n_s_global_context_set_2
#define __pyx_n_s_graph __pyx_mstate_global->__pyx_n_s_graph
#define __pyx_n_s_graph_api_capnp __pyx_mstate_global->__pyx_n_s_graph_api_capnp
#define __pyx_n_s_graph_api_capnp_cython __pyx_mstate_global->__pyx_n_s_graph_api_capnp_cython
#define __pyx_n_s_graph_index __pyx_mstate_global->__pyx_n_s_graph_index
#define __pyx_n_s_graphid __pyx_mstate_global->__pyx_n_s_graphid
#define __pyx_n_s_group_by_clusters __pyx_mstate_global->__pyx_n_s_group_by_clusters
#define __pyx_n_s_hard __pyx_mstate_global->__pyx_n_s_hard
#define __pyx_n_s_ident __pyx_mstate_global->__pyx_n_s_ident
#define __pyx_n_u_ident __pyx_mstate_global->__pyx_n_u_ident
#define __pyx_n_s_immutables __pyx_mstate_global->__pyx_n_s_immutables
#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import
#define __pyx_n_s_inclusive __pyx_mstate_global->__pyx_n_s_inclusive
#define __pyx_n_s_index __pyx_mstate_global->__pyx_n_s_index
#define __pyx_n_s_index_getter __pyx_mstate_global->__pyx_n_s_index_getter
#define __pyx_n_s_index_getter_2 __pyx_mstate_global->__pyx_n_s_index_getter_2
#define __pyx_n_s_init __pyx_mstate_global->__pyx_n_s_init
#define __pyx_n_s_init_2 __pyx_mstate_global->__pyx_n_s_init_2
#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass
#define __pyx_n_s_initialize __pyx_mstate_global->__pyx_n_s_initialize
#define __pyx_n_s_initialized __pyx_mstate_global->__pyx_n_s_initialized
#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing
#define __pyx_n_s_int __pyx_mstate_global->__pyx_n_s_int
#define __pyx_n_s_is_check_alignment __pyx_mstate_global->__pyx_n_s_is_check_alignment
#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine
#define __pyx_n_s_is_dir __pyx_mstate_global->__pyx_n_s_is_dir
#define __pyx_n_s_is_file __pyx_mstate_global->__pyx_n_s_is_file
#define __pyx_n_s_is_initialize __pyx_mstate_global->__pyx_n_s_is_initialize
#define __pyx_n_s_is_mount __pyx_mstate_global->__pyx_n_s_is_mount
#define __pyx_n_s_is_predict __pyx_mstate_global->__pyx_n_s_is_predict
#define __pyx_n_s_is_synchronize __pyx_mstate_global->__pyx_n_s_is_synchronize
#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled
#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items
#define __pyx_n_s_itertools __pyx_mstate_global->__pyx_n_s_itertools
#define __pyx_n_s_kind __pyx_mstate_global->__pyx_n_s_kind
#define __pyx_n_s_len __pyx_mstate_global->__pyx_n_s_len
#define __pyx_n_s_length __pyx_mstate_global->__pyx_n_s_length
#define __pyx_n_s_lgenerator __pyx_mstate_global->__pyx_n_s_lgenerator
#define __pyx_kp_s_list_Definition __pyx_mstate_global->__pyx_kp_s_list_Definition
#define __pyx_kp_s_list_Node __pyx_mstate_global->__pyx_kp_s_list_Node
#define __pyx_kp_s_list_TacticPredictionsGraph __pyx_mstate_global->__pyx_kp_s_list_TacticPredictionsGraph
#define __pyx_kp_s_list_TacticPredictionsText __pyx_mstate_global->__pyx_kp_s_list_TacticPredictionsText
#define __pyx_kp_s_list_int __pyx_mstate_global->__pyx_kp_s_list_int
#define __pyx_n_s_local_to_global __pyx_mstate_global->__pyx_n_s_local_to_global
#define __pyx_n_s_log_annotation __pyx_mstate_global->__pyx_n_s_log_annotation
#define __pyx_n_s_lowlevel __pyx_mstate_global->__pyx_n_s_lowlevel
#define __pyx_n_s_lowlevel_data_reader __pyx_mstate_global->__pyx_n_s_lowlevel_data_reader
#define __pyx_n_s_lowlevel_to_highlevel __pyx_mstate_global->__pyx_n_s_lowlevel_to_highlevel
#define __pyx_n_s_lreader __pyx_mstate_global->__pyx_n_s_lreader
#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main
#define __pyx_n_s_main_thread __pyx_mstate_global->__pyx_n_s_main_thread
#define __pyx_n_s_major __pyx_mstate_global->__pyx_n_s_major
#define __pyx_n_s_memoryview __pyx_mstate_global->__pyx_n_s_memoryview
#define __pyx_n_s_message_file __pyx_mstate_global->__pyx_n_s_message_file
#define __pyx_n_s_message_reader __pyx_mstate_global->__pyx_n_s_message_reader
#define __pyx_kp_u_message_was_equal_to_the_record __pyx_mstate_global->__pyx_kp_u_message_was_equal_to_the_record
#define __pyx_kp_u_message_was_not_equal_to_the __pyx_mstate_global->__pyx_kp_u_message_was_not_equal_to_the
#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass
#define __pyx_n_s_mm __pyx_mstate_global->__pyx_n_s_mm
#define __pyx_n_s_mmap __pyx_mstate_global->__pyx_n_s_mmap
#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module
#define __pyx_n_s_mountpoint __pyx_mstate_global->__pyx_n_s_mountpoint
#define __pyx_n_s_msg __pyx_mstate_global->__pyx_n_s_msg
#define __pyx_n_s_mv __pyx_mstate_global->__pyx_n_s_mv
#define __pyx_n_s_n __pyx_mstate_global->__pyx_n_s_n
#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name
#define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2
#define __pyx_n_s_new_context __pyx_mstate_global->__pyx_n_s_new_context
#define __pyx_n_s_new_message __pyx_mstate_global->__pyx_n_s_new_message
#define __pyx_n_s_new_set __pyx_mstate_global->__pyx_n_s_new_set
#define __pyx_n_s_new_soft __pyx_mstate_global->__pyx_n_s_new_soft
#define __pyx_n_s_next_disabled_sigint __pyx_mstate_global->__pyx_n_s_next_disabled_sigint
#define __pyx_kp_s_no_default___reduce___due_to_non __pyx_mstate_global->__pyx_kp_s_no_default___reduce___due_to_non
#define __pyx_kp_u_node __pyx_mstate_global->__pyx_kp_u_node
#define __pyx_n_u_nodeIndex __pyx_mstate_global->__pyx_n_u_nodeIndex
#define __pyx_n_s_node_2 __pyx_mstate_global->__pyx_n_s_node_2
#define __pyx_n_s_node_by_id __pyx_mstate_global->__pyx_n_s_node_by_id
#define __pyx_n_s_node_contents __pyx_mstate_global->__pyx_n_s_node_contents
#define __pyx_n_s_node_dependencies __pyx_mstate_global->__pyx_n_s_node_dependencies
#define __pyx_n_s_node_hash __pyx_mstate_global->__pyx_n_s_node_hash
#define __pyx_n_s_node_label __pyx_mstate_global->__pyx_n_s_node_label
#define __pyx_n_s_nodeid __pyx_mstate_global->__pyx_n_s_nodeid
#define __pyx_n_s_nodes __pyx_mstate_global->__pyx_n_s_nodes
#define __pyx_n_s_online_data_predict __pyx_mstate_global->__pyx_n_s_online_data_predict
#define __pyx_n_s_online_definitions_initialize __pyx_mstate_global->__pyx_n_s_online_definitions_initialize
#define __pyx_n_s_open __pyx_mstate_global->__pyx_n_s_open
#define __pyx_n_s_original __pyx_mstate_global->__pyx_n_s_original
#define __pyx_n_s_p __pyx_mstate_global->__pyx_n_s_p
#define __pyx_n_s_parent __pyx_mstate_global->__pyx_n_s_parent
#define __pyx_n_s_parts __pyx_mstate_global->__pyx_n_s_parts
#define __pyx_n_s_pathlib __pyx_mstate_global->__pyx_n_s_pathlib
#define __pyx_n_s_pg __pyx_mstate_global->__pyx_n_s_pg
#define __pyx_n_s_pred __pyx_mstate_global->__pyx_n_s_pred
#define __pyx_n_s_predict __pyx_mstate_global->__pyx_n_s_predict
#define __pyx_n_s_prediction __pyx_mstate_global->__pyx_n_s_prediction
#define __pyx_n_s_prediction_generator __pyx_mstate_global->__pyx_n_s_prediction_generator
#define __pyx_n_s_prediction_generator_locals_pred __pyx_mstate_global->__pyx_n_s_prediction_generator_locals_pred
#define __pyx_n_s_prediction_generator_sub __pyx_mstate_global->__pyx_n_s_prediction_generator_sub
#define __pyx_n_s_prediction_requests __pyx_mstate_global->__pyx_n_s_prediction_requests
#define __pyx_n_s_predictions __pyx_mstate_global->__pyx_n_s_predictions
#define __pyx_n_s_preds __pyx_mstate_global->__pyx_n_s_preds
#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare
#define __pyx_n_s_prev __pyx_mstate_global->__pyx_n_s_prev
#define __pyx_n_s_prev_sig __pyx_mstate_global->__pyx_n_s_prev_sig
#define __pyx_n_s_previous __pyx_mstate_global->__pyx_n_s_previous
#define __pyx_n_s_print __pyx_mstate_global->__pyx_n_s_print
#define __pyx_n_s_proof __pyx_mstate_global->__pyx_n_s_proof
#define __pyx_n_s_proof_state __pyx_mstate_global->__pyx_n_s_proof_state
#define __pyx_n_s_propagate __pyx_mstate_global->__pyx_n_s_propagate
#define __pyx_n_s_propagate_2 __pyx_mstate_global->__pyx_n_s_propagate_2
#define __pyx_n_s_pytact __pyx_mstate_global->__pyx_n_s_pytact
#define __pyx_n_s_pytact_data_reader __pyx_mstate_global->__pyx_n_s_pytact_data_reader
#define __pyx_kp_s_pytact_data_reader_pyx __pyx_mstate_global->__pyx_kp_s_pytact_data_reader_pyx
#define __pyx_n_s_pytact_graph_api_capnp __pyx_mstate_global->__pyx_n_s_pytact_graph_api_capnp
#define __pyx_n_s_pytact_graph_api_capnp_cython __pyx_mstate_global->__pyx_n_s_pytact_graph_api_capnp_cython
#define __pyx_kp_s_pytact_graph_api_capnp_cython_Ab __pyx_mstate_global->__pyx_kp_s_pytact_graph_api_capnp_cython_Ab
#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state
#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable
#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname
#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range
#define __pyx_n_u_rb __pyx_mstate_global->__pyx_n_u_rb
#define __pyx_n_s_read_multiple_packed __pyx_mstate_global->__pyx_n_s_read_multiple_packed
#define __pyx_n_s_reader __pyx_mstate_global->__pyx_n_s_reader
#define __pyx_n_s_record __pyx_mstate_global->__pyx_n_s_record
#define __pyx_n_s_recorded_response __pyx_mstate_global->__pyx_n_s_recorded_response
#define __pyx_kp_u_recorded_response_Recorded_respo __pyx_mstate_global->__pyx_kp_u_recorded_response_Recorded_respo
#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce
#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython
#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex
#define __pyx_n_s_relative_to __pyx_mstate_global->__pyx_n_s_relative_to
#define __pyx_n_s_rep __pyx_mstate_global->__pyx_n_s_rep
#define __pyx_n_s_representative __pyx_mstate_global->__pyx_n_s_representative
#define __pyx_n_s_representatives __pyx_mstate_global->__pyx_n_s_representatives
#define __pyx_n_s_request __pyx_mstate_global->__pyx_n_s_request
#define __pyx_n_s_resource __pyx_mstate_global->__pyx_n_s_resource
#define __pyx_n_s_response __pyx_mstate_global->__pyx_n_s_response
#define __pyx_n_s_result __pyx_mstate_global->__pyx_n_s_result
#define __pyx_n_s_return __pyx_mstate_global->__pyx_n_s_return
#define __pyx_n_s_returncode __pyx_mstate_global->__pyx_n_s_returncode
#define __pyx_n_s_reversed __pyx_mstate_global->__pyx_n_s_reversed
#define __pyx_n_s_run __pyx_mstate_global->__pyx_n_s_run
#define __pyx_n_s_schema __pyx_mstate_global->__pyx_n_s_schema
#define __pyx_n_s_seen __pyx_mstate_global->__pyx_n_s_seen
#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self
#define __pyx_kp_s_self_edges_self_graph_index_cann __pyx_mstate_global->__pyx_kp_s_self_edges_self_graph_index_cann
#define __pyx_kp_s_self_graph_index_cannot_be_conve __pyx_mstate_global->__pyx_kp_s_self_graph_index_cannot_be_conve
#define __pyx_kp_s_self_graph_index_self_node_canno __pyx_mstate_global->__pyx_kp_s_self_graph_index_self_node_canno
#define __pyx_kp_s_self_graph_index_self_reader_can __pyx_mstate_global->__pyx_kp_s_self_graph_index_self_reader_can
#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send
#define __pyx_n_s_set __pyx_mstate_global->__pyx_n_s_set
#define __pyx_kp_s_set_Definition __pyx_mstate_global->__pyx_kp_s_set_Definition
#define __pyx_kp_s_set_Definition_None __pyx_mstate_global->__pyx_kp_s_set_Definition_None
#define __pyx_kp_s_set_Node __pyx_mstate_global->__pyx_kp_s_set_Node
#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name
#define __pyx_n_s_setrlimit __pyx_mstate_global->__pyx_n_s_setrlimit
#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate
#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython
#define __pyx_n_s_setup_dataset __pyx_mstate_global->__pyx_n_s_setup_dataset
#define __pyx_n_s_should_propagate __pyx_mstate_global->__pyx_n_s_should_propagate
#define __pyx_n_s_shutil __pyx_mstate_global->__pyx_n_s_shutil
#define __pyx_n_s_signal __pyx_mstate_global->__pyx_n_s_signal
#define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size
#define __pyx_n_s_sleep __pyx_mstate_global->__pyx_n_s_sleep
#define __pyx_n_s_socket __pyx_mstate_global->__pyx_n_s_socket
#define __pyx_kp_s_socket_socket __pyx_mstate_global->__pyx_kp_s_socket_socket
#define __pyx_n_s_soft __pyx_mstate_global->__pyx_n_s_soft
#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec
#define __pyx_n_s_spine_only __pyx_mstate_global->__pyx_n_s_spine_only
#define __pyx_n_u_squashfuse __pyx_mstate_global->__pyx_n_u_squashfuse
#define __pyx_n_s_stack __pyx_mstate_global->__pyx_n_s_stack
#define __pyx_n_s_stack_size __pyx_mstate_global->__pyx_n_s_stack_size
#define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start
#define __pyx_n_s_staticmethod __pyx_mstate_global->__pyx_n_s_staticmethod
#define __pyx_n_s_stderr __pyx_mstate_global->__pyx_n_s_stderr
#define __pyx_n_s_stdout __pyx_mstate_global->__pyx_n_s_stdout
#define __pyx_n_s_str __pyx_mstate_global->__pyx_n_s_str
#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource
#define __pyx_n_s_sub_context __pyx_mstate_global->__pyx_n_s_sub_context
#define __pyx_n_s_subprocess __pyx_mstate_global->__pyx_n_s_subprocess
#define __pyx_kp_u_suggests_that_the_real_root_mig __pyx_mstate_global->__pyx_kp_u_suggests_that_the_real_root_mig
#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super
#define __pyx_n_s_synchronize __pyx_mstate_global->__pyx_n_s_synchronize
#define __pyx_n_s_synchronized __pyx_mstate_global->__pyx_n_s_synchronized
#define __pyx_n_s_tactic __pyx_mstate_global->__pyx_n_s_tactic
#define __pyx_n_u_tactic __pyx_mstate_global->__pyx_n_u_tactic
#define __pyx_n_u_tacticText __pyx_mstate_global->__pyx_n_u_tacticText
#define __pyx_n_s_tactic_text __pyx_mstate_global->__pyx_n_s_tactic_text
#define __pyx_n_s_tactics __pyx_mstate_global->__pyx_n_s_tactics
#define __pyx_n_s_temp __pyx_mstate_global->__pyx_n_s_temp
#define __pyx_n_u_term __pyx_mstate_global->__pyx_n_u_term
#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test
#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text
#define __pyx_n_s_textPrediction __pyx_mstate_global->__pyx_n_s_textPrediction
#define __pyx_n_s_threading __pyx_mstate_global->__pyx_n_s_threading
#define __pyx_n_s_throw __pyx_mstate_global->__pyx_n_s_throw
#define __pyx_n_s_time __pyx_mstate_global->__pyx_n_s_time
#define __pyx_n_s_to_dict __pyx_mstate_global->__pyx_n_s_to_dict
#define __pyx_n_s_traversal_limit_in_words __pyx_mstate_global->__pyx_n_s_traversal_limit_in_words
#define __pyx_n_s_typing __pyx_mstate_global->__pyx_n_s_typing
#define __pyx_n_u_unalignedDefinitions __pyx_mstate_global->__pyx_n_u_unalignedDefinitions
#define __pyx_n_u_unalignedTactics __pyx_mstate_global->__pyx_n_u_unalignedTactics
#define __pyx_n_s_unknown_definitions __pyx_mstate_global->__pyx_n_s_unknown_definitions
#define __pyx_n_s_unknown_tactics __pyx_mstate_global->__pyx_n_s_unknown_tactics
#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update
#define __pyx_n_s_which __pyx_mstate_global->__pyx_n_s_which
#define __pyx_n_s_with_suffix __pyx_mstate_global->__pyx_n_s_with_suffix
#define __pyx_n_s_write_packed __pyx_mstate_global->__pyx_n_s_write_packed
#define __pyx_float_0_01 __pyx_mstate_global->__pyx_float_0_01
#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0
#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1
#define __pyx_int_18446744073709551615 __pyx_mstate_global->__pyx_int_18446744073709551615
#define __pyx_codeobj_ __pyx_mstate_global->__pyx_codeobj_
#define __pyx_tuple__2 __pyx_mstate_global->__pyx_tuple__2
#define __pyx_tuple__3 __pyx_mstate_global->__pyx_tuple__3
#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7
#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11
#define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14
#define __pyx_tuple__16 __pyx_mstate_global->__pyx_tuple__16
#define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20
#define __pyx_tuple__22 __pyx_mstate_global->__pyx_tuple__22
#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28
#define __pyx_tuple__29 __pyx_mstate_global->__pyx_tuple__29
#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34
#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35
#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36
#define __pyx_tuple__37 __pyx_mstate_global->__pyx_tuple__37
#define __pyx_tuple__39 __pyx_mstate_global->__pyx_tuple__39
#define __pyx_tuple__41 __pyx_mstate_global->__pyx_tuple__41
#define __pyx_tuple__43 __pyx_mstate_global->__pyx_tuple__43
#define __pyx_tuple__44 __pyx_mstate_global->__pyx_tuple__44
#define __pyx_tuple__47 __pyx_mstate_global->__pyx_tuple__47
#define __pyx_tuple__49 __pyx_mstate_global->__pyx_tuple__49
#define __pyx_tuple__51 __pyx_mstate_global->__pyx_tuple__51
#define __pyx_tuple__74 __pyx_mstate_global->__pyx_tuple__74
#define __pyx_tuple__75 __pyx_mstate_global->__pyx_tuple__75
#define __pyx_tuple__77 __pyx_mstate_global->__pyx_tuple__77
#define __pyx_tuple__79 __pyx_mstate_global->__pyx_tuple__79
#define __pyx_tuple__84 __pyx_mstate_global->__pyx_tuple__84
#define __pyx_tuple__86 __pyx_mstate_global->__pyx_tuple__86
#define __pyx_tuple__88 __pyx_mstate_global->__pyx_tuple__88
#define __pyx_tuple__92 __pyx_mstate_global->__pyx_tuple__92
#define __pyx_tuple__94 __pyx_mstate_global->__pyx_tuple__94
#define __pyx_tuple__96 __pyx_mstate_global->__pyx_tuple__96
#define __pyx_tuple__98 __pyx_mstate_global->__pyx_tuple__98
#define __pyx_tuple__99 __pyx_mstate_global->__pyx_tuple__99
#define __pyx_codeobj__4 __pyx_mstate_global->__pyx_codeobj__4
#define __pyx_codeobj__9 __pyx_mstate_global->__pyx_codeobj__9
#define __pyx_tuple__103 __pyx_mstate_global->__pyx_tuple__103
#define __pyx_tuple__104 __pyx_mstate_global->__pyx_tuple__104
#define __pyx_tuple__106 __pyx_mstate_global->__pyx_tuple__106
#define __pyx_tuple__107 __pyx_mstate_global->__pyx_tuple__107
#define __pyx_tuple__109 __pyx_mstate_global->__pyx_tuple__109
#define __pyx_tuple__110 __pyx_mstate_global->__pyx_tuple__110
#define __pyx_tuple__111 __pyx_mstate_global->__pyx_tuple__111
#define __pyx_tuple__112 __pyx_mstate_global->__pyx_tuple__112
#define __pyx_tuple__113 __pyx_mstate_global->__pyx_tuple__113
#define __pyx_tuple__114 __pyx_mstate_global->__pyx_tuple__114
#define __pyx_tuple__116 __pyx_mstate_global->__pyx_tuple__116
#define __pyx_tuple__117 __pyx_mstate_global->__pyx_tuple__117
#define __pyx_tuple__119 __pyx_mstate_global->__pyx_tuple__119
#define __pyx_tuple__120 __pyx_mstate_global->__pyx_tuple__120
#define __pyx_tuple__122 __pyx_mstate_global->__pyx_tuple__122
#define __pyx_tuple__124 __pyx_mstate_global->__pyx_tuple__124
#define __pyx_tuple__126 __pyx_mstate_global->__pyx_tuple__126
#define __pyx_tuple__128 __pyx_mstate_global->__pyx_tuple__128
#define __pyx_tuple__129 __pyx_mstate_global->__pyx_tuple__129
#define __pyx_tuple__131 __pyx_mstate_global->__pyx_tuple__131
#define __pyx_tuple__132 __pyx_mstate_global->__pyx_tuple__132
#define __pyx_codeobj__12 __pyx_mstate_global->__pyx_codeobj__12
#define __pyx_codeobj__13 __pyx_mstate_global->__pyx_codeobj__13
#define __pyx_codeobj__15 __pyx_mstate_global->__pyx_codeobj__15
#define __pyx_codeobj__17 __pyx_mstate_global->__pyx_codeobj__17
#define __pyx_codeobj__18 __pyx_mstate_global->__pyx_codeobj__18
#define __pyx_codeobj__19 __pyx_mstate_global->__pyx_codeobj__19
#define __pyx_codeobj__21 __pyx_mstate_global->__pyx_codeobj__21
#define __pyx_codeobj__23 __pyx_mstate_global->__pyx_codeobj__23
#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24
#define __pyx_codeobj__26 __pyx_mstate_global->__pyx_codeobj__26
#define __pyx_codeobj__27 __pyx_mstate_global->__pyx_codeobj__27
#define __pyx_codeobj__30 __pyx_mstate_global->__pyx_codeobj__30
#define __pyx_codeobj__32 __pyx_mstate_global->__pyx_codeobj__32
#define __pyx_codeobj__38 __pyx_mstate_global->__pyx_codeobj__38
#define __pyx_codeobj__40 __pyx_mstate_global->__pyx_codeobj__40
#define __pyx_codeobj__42 __pyx_mstate_global->__pyx_codeobj__42
#define __pyx_codeobj__45 __pyx_mstate_global->__pyx_codeobj__45
#define __pyx_codeobj__46 __pyx_mstate_global->__pyx_codeobj__46
#define __pyx_codeobj__48 __pyx_mstate_global->__pyx_codeobj__48
#define __pyx_codeobj__50 __pyx_mstate_global->__pyx_codeobj__50
#define __pyx_codeobj__52 __pyx_mstate_global->__pyx_codeobj__52
#define __pyx_codeobj__53 __pyx_mstate_global->__pyx_codeobj__53
#define __pyx_codeobj__54 __pyx_mstate_global->__pyx_codeobj__54
#define __pyx_codeobj__55 __pyx_mstate_global->__pyx_codeobj__55
#define __pyx_codeobj__56 __pyx_mstate_global->__pyx_codeobj__56
#define __pyx_codeobj__57 __pyx_mstate_global->__pyx_codeobj__57
#define __pyx_codeobj__58 __pyx_mstate_global->__pyx_codeobj__58
#define __pyx_codeobj__59 __pyx_mstate_global->__pyx_codeobj__59
#define __pyx_codeobj__60 __pyx_mstate_global->__pyx_codeobj__60
#define __pyx_codeobj__61 __pyx_mstate_global->__pyx_codeobj__61
#define __pyx_codeobj__62 __pyx_mstate_global->__pyx_codeobj__62
#define __pyx_codeobj__63 __pyx_mstate_global->__pyx_codeobj__63
#define __pyx_codeobj__64 __pyx_mstate_global->__pyx_codeobj__64
#define __pyx_codeobj__65 __pyx_mstate_global->__pyx_codeobj__65
#define __pyx_codeobj__66 __pyx_mstate_global->__pyx_codeobj__66
#define __pyx_codeobj__67 __pyx_mstate_global->__pyx_codeobj__67
#define __pyx_codeobj__68 __pyx_mstate_global->__pyx_codeobj__68
#define __pyx_codeobj__69 __pyx_mstate_global->__pyx_codeobj__69
#define __pyx_codeobj__70 __pyx_mstate_global->__pyx_codeobj__70
#define __pyx_codeobj__71 __pyx_mstate_global->__pyx_codeobj__71
#define __pyx_codeobj__72 __pyx_mstate_global->__pyx_codeobj__72
#define __pyx_codeobj__73 __pyx_mstate_global->__pyx_codeobj__73
#define __pyx_codeobj__76 __pyx_mstate_global->__pyx_codeobj__76
#define __pyx_codeobj__78 __pyx_mstate_global->__pyx_codeobj__78
#define __pyx_codeobj__80 __pyx_mstate_global->__pyx_codeobj__80
#define __pyx_codeobj__81 __pyx_mstate_global->__pyx_codeobj__81
#define __pyx_codeobj__82 __pyx_mstate_global->__pyx_codeobj__82
#define __pyx_codeobj__83 __pyx_mstate_global->__pyx_codeobj__83
#define __pyx_codeobj__85 __pyx_mstate_global->__pyx_codeobj__85
#define __pyx_codeobj__87 __pyx_mstate_global->__pyx_codeobj__87
#define __pyx_codeobj__89 __pyx_mstate_global->__pyx_codeobj__89
#define __pyx_codeobj__90 __pyx_mstate_global->__pyx_codeobj__90
#define __pyx_codeobj__91 __pyx_mstate_global->__pyx_codeobj__91
#define __pyx_codeobj__93 __pyx_mstate_global->__pyx_codeobj__93
#define __pyx_codeobj__95 __pyx_mstate_global->__pyx_codeobj__95
#define __pyx_codeobj__97 __pyx_mstate_global->__pyx_codeobj__97
#define __pyx_codeobj__100 __pyx_mstate_global->__pyx_codeobj__100
#define __pyx_codeobj__101 __pyx_mstate_global->__pyx_codeobj__101
#define __pyx_codeobj__102 __pyx_mstate_global->__pyx_codeobj__102
#define __pyx_codeobj__105 __pyx_mstate_global->__pyx_codeobj__105
#define __pyx_codeobj__108 __pyx_mstate_global->__pyx_codeobj__108
#define __pyx_codeobj__115 __pyx_mstate_global->__pyx_codeobj__115
#define __pyx_codeobj__118 __pyx_mstate_global->__pyx_codeobj__118
#define __pyx_codeobj__121 __pyx_mstate_global->__pyx_codeobj__121
#define __pyx_codeobj__123 __pyx_mstate_global->__pyx_codeobj__123
#define __pyx_codeobj__125 __pyx_mstate_global->__pyx_codeobj__125
#define __pyx_codeobj__127 __pyx_mstate_global->__pyx_codeobj__127
#define __pyx_codeobj__130 __pyx_mstate_global->__pyx_codeobj__130
#define __pyx_codeobj__133 __pyx_mstate_global->__pyx_codeobj__133
#endif
/* #### Code section: module_code ### */

/* "pytact/data_reader.pyx":112
 * T = TypeVar('T')
 * class TupleLike():
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):             # <<<<<<<<<<<<<<
 *         super().__init__()
 *         self._count = count
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9TupleLike_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9TupleLike_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9TupleLike_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_9TupleLike_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_count = 0;
  PyObject *__pyx_v_index_getter = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_count,&__pyx_n_s_index_getter,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_count,&__pyx_n_s_index_getter,0};
    #endif
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_count)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(0, 112, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_index_getter)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 112, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(0, 112, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 112, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_count = ((PyObject*)values[1]);
    __pyx_v_index_getter = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 112, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.TupleLike.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_count), (&PyInt_Type), 0, "count", 1))) __PYX_ERR(0, 112, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_9TupleLike___init__(__pyx_self, __pyx_v_self, __pyx_v_count, __pyx_v_index_getter);

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

static PyObject *__pyx_pf_6pytact_11data_reader_9TupleLike___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_count, PyObject *__pyx_v_index_getter) {
  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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pytact/data_reader.pyx":113
 * class TupleLike():
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):
 *         super().__init__()             # <<<<<<<<<<<<<<
 *         self._count = count
 *         self._index_getter = index_getter
 */
  __pyx_t_2 = __Pyx_CyFunction_GetClassObj(__pyx_self);
  if (!__pyx_t_2) { PyErr_SetString(PyExc_SystemError, "super(): empty __class__ cell"); __PYX_ERR(0, 113, __pyx_L1_error) }
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __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(__pyx_v_self);
  __Pyx_GIVEREF(__pyx_v_self);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  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_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_2, };
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":114
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):
 *         super().__init__()
 *         self._count = count             # <<<<<<<<<<<<<<
 *         self._index_getter = index_getter
 *     def __getitem__(self, index: int) -> T:
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_count_2, __pyx_v_count) < 0) __PYX_ERR(0, 114, __pyx_L1_error)

  /* "pytact/data_reader.pyx":115
 *         super().__init__()
 *         self._count = count
 *         self._index_getter = index_getter             # <<<<<<<<<<<<<<
 *     def __getitem__(self, index: int) -> T:
 *         if index >= self._count: raise IndexError()
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_index_getter_2, __pyx_v_index_getter) < 0) __PYX_ERR(0, 115, __pyx_L1_error)

  /* "pytact/data_reader.pyx":112
 * T = TypeVar('T')
 * class TupleLike():
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):             # <<<<<<<<<<<<<<
 *         super().__init__()
 *         self._count = count
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.TupleLike.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":116
 *         self._count = count
 *         self._index_getter = index_getter
 *     def __getitem__(self, index: int) -> T:             # <<<<<<<<<<<<<<
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9TupleLike_3__getitem__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9TupleLike_3__getitem__ = {"__getitem__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9TupleLike_3__getitem__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_9TupleLike_3__getitem__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_index,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_index,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_index)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, 1); __PYX_ERR(0, 116, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__getitem__") < 0)) __PYX_ERR(0, 116, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_index = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__getitem__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 116, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.TupleLike.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_index), (&PyInt_Type), 0, "index", 1))) __PYX_ERR(0, 116, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_9TupleLike_2__getitem__(__pyx_self, __pyx_v_self, __pyx_v_index);

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

static PyObject *__pyx_pf_6pytact_11data_reader_9TupleLike_2__getitem__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":117
 *         self._index_getter = index_getter
 *     def __getitem__(self, index: int) -> T:
 *         if index >= self._count: raise IndexError()             # <<<<<<<<<<<<<<
 *         return self._index_getter(index)
 *     def __len__(self) -> int:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_count_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_index, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(__pyx_t_3)) {
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_IndexError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __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, 117, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":118
 *     def __getitem__(self, index: int) -> T:
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)             # <<<<<<<<<<<<<<
 *     def __len__(self) -> int:
 *         return self._count
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_index_getter_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_index};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __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;

  /* "pytact/data_reader.pyx":116
 *         self._count = count
 *         self._index_getter = index_getter
 *     def __getitem__(self, index: int) -> T:             # <<<<<<<<<<<<<<
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pytact.data_reader.TupleLike.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":119
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return self._count
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9TupleLike_5__len__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9TupleLike_5__len__ = {"__len__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9TupleLike_5__len__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_9TupleLike_5__len__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 119, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__len__") < 0)) __PYX_ERR(0, 119, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__len__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 119, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.TupleLike.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_9TupleLike_4__len__(__pyx_self, __pyx_v_self);

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

static PyObject *__pyx_pf_6pytact_11data_reader_9TupleLike_4__len__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__len__", 0);

  /* "pytact/data_reader.pyx":120
 *         return self._index_getter(index)
 *     def __len__(self) -> int:
 *         return self._count             # <<<<<<<<<<<<<<
 * 
 * @contextmanager
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_count_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyInt_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_t_1))) __PYX_ERR(0, 120, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":119
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return self._count
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.TupleLike.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":122
 *         return self._count
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def file_dataset_reader(fname: Path) -> Generator[Any, None, None]:
 *     """Load a single dataset file into memory, and expose it's raw Cap'n Proto structures.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_1file_dataset_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_file_dataset_reader, "Load a single dataset file into memory, and expose it's raw Cap'n Proto structures.\n\n    This is a low-level function. Prefer to use `data_reader` or `lowlevel_data_reader`.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_1file_dataset_reader = {"file_dataset_reader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_1file_dataset_reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_file_dataset_reader};
static PyObject *__pyx_pw_6pytact_11data_reader_1file_dataset_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_fname = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file_dataset_reader (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fname)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 122, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "file_dataset_reader") < 0)) __PYX_ERR(0, 122, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_fname = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("file_dataset_reader", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 122, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_file_dataset_reader(__pyx_self, __pyx_v_fname);

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

static PyObject *__pyx_pf_6pytact_11data_reader_file_dataset_reader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("file_dataset_reader", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 122, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_fname = __pyx_v_fname;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_fname);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_fname);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_2generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_file_dataset_reader, __pyx_n_s_file_dataset_reader, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 122, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":128
 *     This is a low-level function. Prefer to use `data_reader` or `lowlevel_data_reader`.
 *     """
 *     def create_mmap(fname):             # <<<<<<<<<<<<<<
 *         # No need to keep the file open, at least on linux
 *         # Closing this prevents file descriptor limits from being exceeded
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_19file_dataset_reader_1create_mmap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_19file_dataset_reader_1create_mmap = {"create_mmap", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_19file_dataset_reader_1create_mmap, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_19file_dataset_reader_1create_mmap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_fname = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("create_mmap (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fname,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fname)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 128, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "create_mmap") < 0)) __PYX_ERR(0, 128, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_fname = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("create_mmap", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 128, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader.create_mmap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_19file_dataset_reader_create_mmap(__pyx_self, __pyx_v_fname);

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

static PyObject *__pyx_pf_6pytact_11data_reader_19file_dataset_reader_create_mmap(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fname) {
  PyObject *__pyx_v_f = 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;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create_mmap", 0);

  /* "pytact/data_reader.pyx":131
 *         # No need to keep the file open, at least on linux
 *         # Closing this prevents file descriptor limits from being exceeded
 *         with open(fname, 'rb') as f:             # <<<<<<<<<<<<<<
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)
 *     with create_mmap(fname) as mm:
 */
  /*with:*/ {
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_fname);
    __Pyx_GIVEREF(__pyx_v_fname);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_fname);
    __Pyx_INCREF(__pyx_n_u_rb);
    __Pyx_GIVEREF(__pyx_n_u_rb);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_u_rb);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 131, __pyx_L3_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_5, };
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 131, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_t_4 = __pyx_t_1;
    __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    /*try:*/ {
      {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        /*try:*/ {
          __pyx_v_f = __pyx_t_4;
          __pyx_t_4 = 0;

          /* "pytact/data_reader.pyx":132
 *         # Closing this prevents file descriptor limits from being exceeded
 *         with open(fname, 'rb') as f:
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)             # <<<<<<<<<<<<<<
 *     with create_mmap(fname) as mm:
 *         with memoryview(mm) as mv:
 */
          __Pyx_XDECREF(__pyx_r);
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_mmap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_mmap); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_fileno); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_5 = NULL;
          __pyx_t_6 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_5)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_5);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
              __pyx_t_6 = 1;
            }
          }
          {
            PyObject *__pyx_callargs[1] = {__pyx_t_5, };
            __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 132, __pyx_L7_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_length, __pyx_int_0) < 0) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_mmap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ACCESS_READ); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_access, __pyx_t_10) < 0) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 132, __pyx_L7_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_r = __pyx_t_10;
          __pyx_t_10 = 0;
          goto __pyx_L11_try_return;

          /* "pytact/data_reader.pyx":131
 *         # No need to keep the file open, at least on linux
 *         # Closing this prevents file descriptor limits from being exceeded
 *         with open(fname, 'rb') as f:             # <<<<<<<<<<<<<<
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)
 *     with create_mmap(fname) as mm:
 */
        }
        __pyx_L7_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader.create_mmap", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_4, &__pyx_t_1) < 0) __PYX_ERR(0, 131, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_2 = PyTuple_Pack(3, __pyx_t_10, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 131, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 131, __pyx_L9_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_12 < 0) __PYX_ERR(0, 131, __pyx_L9_except_error)
          __pyx_t_13 = (!__pyx_t_12);
          if (unlikely(__pyx_t_13)) {
            __Pyx_GIVEREF(__pyx_t_10);
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_XGIVEREF(__pyx_t_1);
            __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_4, __pyx_t_1);
            __pyx_t_10 = 0; __pyx_t_4 = 0; __pyx_t_1 = 0; 
            __PYX_ERR(0, 131, __pyx_L9_except_error)
          }
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          goto __pyx_L8_exception_handled;
        }
        __pyx_L9_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L11_try_return:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L4_return;
        __pyx_L8_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_3) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__2, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 131, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L6;
      }
      __pyx_L4_return: {
        __pyx_t_9 = __pyx_r;
        __pyx_r = 0;
        if (__pyx_t_3) {
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__2, NULL);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 131, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_r = __pyx_t_9;
        __pyx_t_9 = 0;
        goto __pyx_L0;
      }
      __pyx_L6:;
    }
    goto __pyx_L16;
    __pyx_L3_error:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L1_error;
    __pyx_L16:;
  }

  /* "pytact/data_reader.pyx":128
 *     This is a low-level function. Prefer to use `data_reader` or `lowlevel_data_reader`.
 *     """
 *     def create_mmap(fname):             # <<<<<<<<<<<<<<
 *         # No need to keep the file open, at least on linux
 *         # Closing this prevents file descriptor limits from being exceeded
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader.create_mmap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_f);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":122
 *         return self._count
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def file_dataset_reader(fname: Path) -> Generator[Any, None, None]:
 *     """Load a single dataset file into memory, and expose it's raw Cap'n Proto structures.
 */

static PyObject *__pyx_gb_6pytact_11data_reader_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  int __pyx_t_19;
  int __pyx_t_20;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("file_dataset_reader", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L34_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, 122, __pyx_L1_error)

  /* "pytact/data_reader.pyx":128
 *     This is a low-level function. Prefer to use `data_reader` or `lowlevel_data_reader`.
 *     """
 *     def create_mmap(fname):             # <<<<<<<<<<<<<<
 *         # No need to keep the file open, at least on linux
 *         # Closing this prevents file descriptor limits from being exceeded
 */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_19file_dataset_reader_1create_mmap, 0, __pyx_n_s_file_dataset_reader_locals_creat, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_create_mmap = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":133
 *         with open(fname, 'rb') as f:
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)
 *     with create_mmap(fname) as mm:             # <<<<<<<<<<<<<<
 *         with memoryview(mm) as mv:
 *             with graph_api_capnp.Dataset.from_bytes(
 */
  /*with:*/ {
    __pyx_t_1 = __pyx_pf_6pytact_11data_reader_19file_dataset_reader_create_mmap(__pyx_cur_scope->__pyx_v_create_mmap, __pyx_cur_scope->__pyx_v_fname); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_5, };
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_t_4 = __pyx_t_3;
    __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        /*try:*/ {
          __Pyx_GIVEREF(__pyx_t_4);
          __pyx_cur_scope->__pyx_v_mm = __pyx_t_4;
          __pyx_t_4 = 0;

          /* "pytact/data_reader.pyx":134
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)
 *     with create_mmap(fname) as mm:
 *         with memoryview(mm) as mv:             # <<<<<<<<<<<<<<
 *             with graph_api_capnp.Dataset.from_bytes(
 *                     mv, traversal_limit_in_words=2**64-1) as g:
 */
          /*with:*/ {
            __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_memoryview, __pyx_cur_scope->__pyx_v_mm); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 134, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_10 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_exit); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 134, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_4, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L14_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = NULL;
            __pyx_t_6 = 0;
            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
              __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
              if (likely(__pyx_t_5)) {
                PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                __Pyx_INCREF(__pyx_t_5);
                __Pyx_INCREF(function);
                __Pyx_DECREF_SET(__pyx_t_3, function);
                __pyx_t_6 = 1;
              }
            }
            {
              PyObject *__pyx_callargs[1] = {__pyx_t_5, };
              __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
              __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
              if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L14_error)
              __Pyx_GOTREF(__pyx_t_1);
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            }
            __pyx_t_3 = __pyx_t_1;
            __pyx_t_1 = 0;
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            /*try:*/ {
              {
                __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
                __Pyx_XGOTREF(__pyx_t_11);
                __Pyx_XGOTREF(__pyx_t_12);
                __Pyx_XGOTREF(__pyx_t_13);
                /*try:*/ {
                  __Pyx_GIVEREF(__pyx_t_3);
                  __pyx_cur_scope->__pyx_v_mv = __pyx_t_3;
                  __pyx_t_3 = 0;

                  /* "pytact/data_reader.pyx":135
 *     with create_mmap(fname) as mm:
 *         with memoryview(mm) as mv:
 *             with graph_api_capnp.Dataset.from_bytes(             # <<<<<<<<<<<<<<
 *                     mv, traversal_limit_in_words=2**64-1) as g:
 *                 yield apic.Dataset_Reader(g)
 */
                  /*with:*/ {
                    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 135, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Dataset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 135, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_from_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 135, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_3);
                    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

                    /* "pytact/data_reader.pyx":136
 *         with memoryview(mm) as mv:
 *             with graph_api_capnp.Dataset.from_bytes(
 *                     mv, traversal_limit_in_words=2**64-1) as g:             # <<<<<<<<<<<<<<
 *                 yield apic.Dataset_Reader(g)
 * 
 */
                    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 135, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_mv);
                    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_mv);
                    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_cur_scope->__pyx_v_mv);
                    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_1);
                    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_traversal_limit_in_words, __pyx_int_18446744073709551615) < 0) __PYX_ERR(0, 136, __pyx_L18_error)

                    /* "pytact/data_reader.pyx":135
 *     with create_mmap(fname) as mm:
 *         with memoryview(mm) as mv:
 *             with graph_api_capnp.Dataset.from_bytes(             # <<<<<<<<<<<<<<
 *                     mv, traversal_limit_in_words=2**64-1) as g:
 *                 yield apic.Dataset_Reader(g)
 */
                    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 135, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_5);
                    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                    __pyx_t_14 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_exit); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 135, __pyx_L18_error)
                    __Pyx_GOTREF(__pyx_t_14);
                    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_5, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 135, __pyx_L24_error)
                    __Pyx_GOTREF(__pyx_t_4);
                    __pyx_t_3 = NULL;
                    __pyx_t_6 = 0;
                    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
                      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
                      if (likely(__pyx_t_3)) {
                        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
                        __Pyx_INCREF(__pyx_t_3);
                        __Pyx_INCREF(function);
                        __Pyx_DECREF_SET(__pyx_t_4, function);
                        __pyx_t_6 = 1;
                      }
                    }
                    {
                      PyObject *__pyx_callargs[1] = {__pyx_t_3, };
                      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
                      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L24_error)
                      __Pyx_GOTREF(__pyx_t_1);
                      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                    }
                    __pyx_t_4 = __pyx_t_1;
                    __pyx_t_1 = 0;
                    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                    /*try:*/ {
                      {
                        __Pyx_ExceptionSave(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
                        __Pyx_XGOTREF(__pyx_t_15);
                        __Pyx_XGOTREF(__pyx_t_16);
                        __Pyx_XGOTREF(__pyx_t_17);
                        /*try:*/ {
                          __Pyx_GIVEREF(__pyx_t_4);
                          __pyx_cur_scope->__pyx_v_g = __pyx_t_4;
                          __pyx_t_4 = 0;

                          /* "pytact/data_reader.pyx":137
 *             with graph_api_capnp.Dataset.from_bytes(
 *                     mv, traversal_limit_in_words=2**64-1) as g:
 *                 yield apic.Dataset_Reader(g)             # <<<<<<<<<<<<<<
 * 
 * cdef struct GraphIndex:
 */
                          __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_apic); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 137, __pyx_L28_error)
                          __Pyx_GOTREF(__pyx_t_5);
                          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Dataset_Reader); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L28_error)
                          __Pyx_GOTREF(__pyx_t_1);
                          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
                          __pyx_t_5 = NULL;
                          __pyx_t_6 = 0;
                          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
                            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
                            if (likely(__pyx_t_5)) {
                              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                              __Pyx_INCREF(__pyx_t_5);
                              __Pyx_INCREF(function);
                              __Pyx_DECREF_SET(__pyx_t_1, function);
                              __pyx_t_6 = 1;
                            }
                          }
                          {
                            PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_cur_scope->__pyx_v_g};
                            __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
                            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 137, __pyx_L28_error)
                            __Pyx_GOTREF(__pyx_t_4);
                            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                          }
                          __pyx_r = __pyx_t_4;
                          __pyx_t_4 = 0;
                          __Pyx_XGIVEREF(__pyx_t_2);
                          __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
                          __Pyx_XGIVEREF(__pyx_t_7);
                          __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
                          __Pyx_XGIVEREF(__pyx_t_8);
                          __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
                          __Pyx_XGIVEREF(__pyx_t_9);
                          __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
                          __Pyx_XGIVEREF(__pyx_t_10);
                          __pyx_cur_scope->__pyx_t_4 = __pyx_t_10;
                          __Pyx_XGIVEREF(__pyx_t_11);
                          __pyx_cur_scope->__pyx_t_5 = __pyx_t_11;
                          __Pyx_XGIVEREF(__pyx_t_12);
                          __pyx_cur_scope->__pyx_t_6 = __pyx_t_12;
                          __Pyx_XGIVEREF(__pyx_t_13);
                          __pyx_cur_scope->__pyx_t_7 = __pyx_t_13;
                          __Pyx_XGIVEREF(__pyx_t_14);
                          __pyx_cur_scope->__pyx_t_8 = __pyx_t_14;
                          __Pyx_XGIVEREF(__pyx_t_15);
                          __pyx_cur_scope->__pyx_t_9 = __pyx_t_15;
                          __Pyx_XGIVEREF(__pyx_t_16);
                          __pyx_cur_scope->__pyx_t_10 = __pyx_t_16;
                          __Pyx_XGIVEREF(__pyx_t_17);
                          __pyx_cur_scope->__pyx_t_11 = __pyx_t_17;
                          __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_L34_resume_from_yield:;
                          __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
                          __pyx_cur_scope->__pyx_t_0 = 0;
                          __Pyx_XGOTREF(__pyx_t_2);
                          __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
                          __pyx_cur_scope->__pyx_t_1 = 0;
                          __Pyx_XGOTREF(__pyx_t_7);
                          __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
                          __pyx_cur_scope->__pyx_t_2 = 0;
                          __Pyx_XGOTREF(__pyx_t_8);
                          __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
                          __pyx_cur_scope->__pyx_t_3 = 0;
                          __Pyx_XGOTREF(__pyx_t_9);
                          __pyx_t_10 = __pyx_cur_scope->__pyx_t_4;
                          __pyx_cur_scope->__pyx_t_4 = 0;
                          __Pyx_XGOTREF(__pyx_t_10);
                          __pyx_t_11 = __pyx_cur_scope->__pyx_t_5;
                          __pyx_cur_scope->__pyx_t_5 = 0;
                          __Pyx_XGOTREF(__pyx_t_11);
                          __pyx_t_12 = __pyx_cur_scope->__pyx_t_6;
                          __pyx_cur_scope->__pyx_t_6 = 0;
                          __Pyx_XGOTREF(__pyx_t_12);
                          __pyx_t_13 = __pyx_cur_scope->__pyx_t_7;
                          __pyx_cur_scope->__pyx_t_7 = 0;
                          __Pyx_XGOTREF(__pyx_t_13);
                          __pyx_t_14 = __pyx_cur_scope->__pyx_t_8;
                          __pyx_cur_scope->__pyx_t_8 = 0;
                          __Pyx_XGOTREF(__pyx_t_14);
                          __pyx_t_15 = __pyx_cur_scope->__pyx_t_9;
                          __pyx_cur_scope->__pyx_t_9 = 0;
                          __Pyx_XGOTREF(__pyx_t_15);
                          __pyx_t_16 = __pyx_cur_scope->__pyx_t_10;
                          __pyx_cur_scope->__pyx_t_10 = 0;
                          __Pyx_XGOTREF(__pyx_t_16);
                          __pyx_t_17 = __pyx_cur_scope->__pyx_t_11;
                          __pyx_cur_scope->__pyx_t_11 = 0;
                          __Pyx_XGOTREF(__pyx_t_17);
                          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 137, __pyx_L28_error)

                          /* "pytact/data_reader.pyx":135
 *     with create_mmap(fname) as mm:
 *         with memoryview(mm) as mv:
 *             with graph_api_capnp.Dataset.from_bytes(             # <<<<<<<<<<<<<<
 *                     mv, traversal_limit_in_words=2**64-1) as g:
 *                 yield apic.Dataset_Reader(g)
 */
                        }
                        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
                        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                        goto __pyx_L33_try_end;
                        __pyx_L28_error:;
                        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                        /*except:*/ {
                          __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
                          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_5) < 0) __PYX_ERR(0, 135, __pyx_L30_except_error)
                          __Pyx_GOTREF(__pyx_t_4);
                          __Pyx_GOTREF(__pyx_t_1);
                          __Pyx_GOTREF(__pyx_t_5);
                          __pyx_t_3 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 135, __pyx_L30_except_error)
                          __Pyx_GOTREF(__pyx_t_3);
                          __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_3, NULL);
                          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 135, __pyx_L30_except_error)
                          __Pyx_GOTREF(__pyx_t_18);
                          __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_18);
                          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
                          if (__pyx_t_19 < 0) __PYX_ERR(0, 135, __pyx_L30_except_error)
                          __pyx_t_20 = (!__pyx_t_19);
                          if (unlikely(__pyx_t_20)) {
                            __Pyx_GIVEREF(__pyx_t_4);
                            __Pyx_GIVEREF(__pyx_t_1);
                            __Pyx_XGIVEREF(__pyx_t_5);
                            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_1, __pyx_t_5);
                            __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_5 = 0; 
                            __PYX_ERR(0, 135, __pyx_L30_except_error)
                          }
                          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                          goto __pyx_L29_exception_handled;
                        }
                        __pyx_L30_except_error:;
                        __Pyx_XGIVEREF(__pyx_t_15);
                        __Pyx_XGIVEREF(__pyx_t_16);
                        __Pyx_XGIVEREF(__pyx_t_17);
                        __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
                        goto __pyx_L18_error;
                        __pyx_L29_exception_handled:;
                        __Pyx_XGIVEREF(__pyx_t_15);
                        __Pyx_XGIVEREF(__pyx_t_16);
                        __Pyx_XGIVEREF(__pyx_t_17);
                        __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
                        __pyx_L33_try_end:;
                      }
                    }
                    /*finally:*/ {
                      /*normal exit:*/{
                        if (__pyx_t_14) {
                          __pyx_t_17 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__2, NULL);
                          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                          if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 135, __pyx_L18_error)
                          __Pyx_GOTREF(__pyx_t_17);
                          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
                        }
                        goto __pyx_L27;
                      }
                      __pyx_L27:;
                    }
                    goto __pyx_L38;
                    __pyx_L24_error:;
                    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                    goto __pyx_L18_error;
                    __pyx_L38:;
                  }

                  /* "pytact/data_reader.pyx":134
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)
 *     with create_mmap(fname) as mm:
 *         with memoryview(mm) as mv:             # <<<<<<<<<<<<<<
 *             with graph_api_capnp.Dataset.from_bytes(
 *                     mv, traversal_limit_in_words=2**64-1) as g:
 */
                }
                __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
                __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
                __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                goto __pyx_L23_try_end;
                __pyx_L18_error:;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                /*except:*/ {
                  __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
                  if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_4) < 0) __PYX_ERR(0, 134, __pyx_L20_except_error)
                  __Pyx_GOTREF(__pyx_t_5);
                  __Pyx_GOTREF(__pyx_t_1);
                  __Pyx_GOTREF(__pyx_t_4);
                  __pyx_t_3 = PyTuple_Pack(3, __pyx_t_5, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 134, __pyx_L20_except_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, NULL);
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 134, __pyx_L20_except_error)
                  __Pyx_GOTREF(__pyx_t_14);
                  __pyx_t_20 = __Pyx_PyObject_IsTrue(__pyx_t_14);
                  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                  if (__pyx_t_20 < 0) __PYX_ERR(0, 134, __pyx_L20_except_error)
                  __pyx_t_19 = (!__pyx_t_20);
                  if (unlikely(__pyx_t_19)) {
                    __Pyx_GIVEREF(__pyx_t_5);
                    __Pyx_GIVEREF(__pyx_t_1);
                    __Pyx_XGIVEREF(__pyx_t_4);
                    __Pyx_ErrRestoreWithState(__pyx_t_5, __pyx_t_1, __pyx_t_4);
                    __pyx_t_5 = 0; __pyx_t_1 = 0; __pyx_t_4 = 0; 
                    __PYX_ERR(0, 134, __pyx_L20_except_error)
                  }
                  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
                  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                  goto __pyx_L19_exception_handled;
                }
                __pyx_L20_except_error:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_13);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
                goto __pyx_L8_error;
                __pyx_L19_exception_handled:;
                __Pyx_XGIVEREF(__pyx_t_11);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_XGIVEREF(__pyx_t_13);
                __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
                __pyx_L23_try_end:;
              }
            }
            /*finally:*/ {
              /*normal exit:*/{
                if (__pyx_t_10) {
                  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__2, NULL);
                  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
                  if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 134, __pyx_L8_error)
                  __Pyx_GOTREF(__pyx_t_13);
                  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
                }
                goto __pyx_L17;
              }
              __pyx_L17:;
            }
            goto __pyx_L42;
            __pyx_L14_error:;
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            goto __pyx_L8_error;
            __pyx_L42:;
          }

          /* "pytact/data_reader.pyx":133
 *         with open(fname, 'rb') as f:
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)
 *     with create_mmap(fname) as mm:             # <<<<<<<<<<<<<<
 *         with memoryview(mm) as mv:
 *             with graph_api_capnp.Dataset.from_bytes(
 */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("pytact.data_reader.file_dataset_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_5) < 0) __PYX_ERR(0, 133, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_3 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 133, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_19 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_19 < 0) __PYX_ERR(0, 133, __pyx_L10_except_error)
          __pyx_t_20 = (!__pyx_t_19);
          if (unlikely(__pyx_t_20)) {
            __Pyx_GIVEREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_XGIVEREF(__pyx_t_5);
            __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_1, __pyx_t_5);
            __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_5 = 0; 
            __PYX_ERR(0, 133, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_2) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__2, NULL);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 133, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L46;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    goto __pyx_L1_error;
    __pyx_L46:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":122
 *         return self._count
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def file_dataset_reader(fname: Path) -> Generator[Any, None, None]:
 *     """Load a single dataset file into memory, and expose it's raw Cap'n Proto structures.
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("file_dataset_reader", __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;
}

/* "pytact/data_reader.pyx":167
 *     """Map's a graph-id to a filename. Inverse of `graphid_by_filename`."""
 * 
 *     def __cinit__(self, dataset_path : Path, dataset: list[tuple[Path, Dataset_Reader]]):             # <<<<<<<<<<<<<<
 *         """Do not call this initializer directly. Use `lowlevel_data_reader` instead."""
 *         # Basic, quick sanity check
 */

/* Python wrapper */
static int __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_dataset_path = 0;
  PyObject *__pyx_v_dataset = 0;
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,&__pyx_n_s_dataset,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,&__pyx_n_s_dataset,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dataset_path)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dataset)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); __PYX_ERR(0, 167, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(0, 167, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
      values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
    }
    __pyx_v_dataset_path = values[0];
    __pyx_v_dataset = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 167, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader___cinit__(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self), __pyx_v_dataset_path, __pyx_v_dataset);

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

static int __pyx_pf_6pytact_11data_reader_18LowlevelDataReader___cinit__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, PyObject *__pyx_v_dataset_path, PyObject *__pyx_v_dataset) {
  PyObject *__pyx_v_f = NULL;
  PyObject *__pyx_v_reader = NULL;
  PyObject *__pyx_v_relative_self = NULL;
  PyObject *__pyx_v_real_root = NULL;
  std::vector< ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader>  __pyx_v_c_nodes;
  std::vector< ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader>  __pyx_v_c_edges;
  std::vector<uint32_t>  __pyx_v_c_representatives;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_g = NULL;
  Dataset::Reader __pyx_v_d;
  PyObject *__pyx_v_local_to_global = NULL;
  CYTHON_UNUSED PyObject *__pyx_7genexpr__pyx_v__ = NULL;
  PyObject *__pyx_7genexpr__pyx_v_g = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_i = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_f = NULL;
  CYTHON_UNUSED PyObject *__pyx_8genexpr1__pyx_v__ = NULL;
  PyObject *__pyx_8genexpr2__pyx_v_f = NULL;
  CYTHON_UNUSED PyObject *__pyx_8genexpr2__pyx_v__ = NULL;
  CYTHON_UNUSED PyObject *__pyx_8genexpr3__pyx_v__ = NULL;
  PyObject *__pyx_8genexpr3__pyx_v_g = NULL;
  PyObject *__pyx_8genexpr4__pyx_v_f = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *(*__pyx_t_10)(PyObject *);
  Py_ssize_t __pyx_t_11;
  Py_UCS4 __pyx_t_12;
  int __pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  Dataset::Reader __pyx_t_16;
  Graph::Reader __pyx_t_17;
   ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader __pyx_t_18;
   ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader __pyx_t_19;
  uint32_t __pyx_t_20;
  PyObject *(*__pyx_t_21)(PyObject *);
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_t_22;
  std::vector<std::vector<uint32_t> >  __pyx_t_23;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "pytact/data_reader.pyx":170
 *         """Do not call this initializer directly. Use `lowlevel_data_reader` instead."""
 *         # Basic, quick sanity check
 *         if not dataset:             # <<<<<<<<<<<<<<
 *             raise ValueError(f"There does not appear to be a dataset located at {dataset_path}")
 *         for f, reader in dataset:
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dataset); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 170, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":171
 *         # Basic, quick sanity check
 *         if not dataset:
 *             raise ValueError(f"There does not appear to be a dataset located at {dataset_path}")             # <<<<<<<<<<<<<<
 *         for f, reader in dataset:
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:
 */
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_dataset_path, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyUnicode_Concat(__pyx_kp_u_There_does_not_appear_to_be_a_da, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 171, __pyx_L1_error)

    /* "pytact/data_reader.pyx":170
 *         """Do not call this initializer directly. Use `lowlevel_data_reader` instead."""
 *         # Basic, quick sanity check
 *         if not dataset:             # <<<<<<<<<<<<<<
 *             raise ValueError(f"There does not appear to be a dataset located at {dataset_path}")
 *         for f, reader in dataset:
 */
  }

  /* "pytact/data_reader.pyx":172
 *         if not dataset:
 *             raise ValueError(f"There does not appear to be a dataset located at {dataset_path}")
 *         for f, reader in dataset:             # <<<<<<<<<<<<<<
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(
 */
  if (likely(PyList_CheckExact(__pyx_v_dataset)) || PyTuple_CheckExact(__pyx_v_dataset)) {
    __pyx_t_3 = __pyx_v_dataset; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_dataset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 172, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 172, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 172, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 172, __pyx_L1_error)
        #else
        __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 172, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
      }
    } else {
      __pyx_t_4 = __pyx_t_6(__pyx_t_3);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 172, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_4);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
      PyObject* sequence = __pyx_t_4;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 172, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_8);
      #else
      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      #endif
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_9 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 172, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
      index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 172, __pyx_L1_error)
      __pyx_t_10 = NULL;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 172, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_f, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_reader, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "pytact/data_reader.pyx":173
 *             raise ValueError(f"There does not appear to be a dataset located at {dataset_path}")
 *         for f, reader in dataset:
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_reader, __pyx_n_s_data_version); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_major); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_currentVersion); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_major); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyObject_RichCompare(__pyx_t_8, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 173, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__pyx_t_2)) {

      /* "pytact/data_reader.pyx":175
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "             # <<<<<<<<<<<<<<
 *                     f"{graph_api_capnp.currentVersion} but file {f} contains data versioned as "
 *                     f"{reader.data_version}.")
 */
      __pyx_t_7 = PyTuple_New(7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 175, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_11 = 0;
      __pyx_t_12 = 127;
      __Pyx_INCREF(__pyx_kp_u_This_library_is_compiled_for_a_d);
      __pyx_t_11 += 68;
      __Pyx_GIVEREF(__pyx_kp_u_This_library_is_compiled_for_a_d);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_This_library_is_compiled_for_a_d);

      /* "pytact/data_reader.pyx":176
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "
 *                     f"{graph_api_capnp.currentVersion} but file {f} contains data versioned as "             # <<<<<<<<<<<<<<
 *                     f"{reader.data_version}.")
 *             relative_self = Path(reader.dependencies[0])
 */
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_currentVersion); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 176, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_8, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_12;
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u_but_file);
      __pyx_t_11 += 10;
      __Pyx_GIVEREF(__pyx_kp_u_but_file);
      PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u_but_file);
      __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_f, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_12;
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_INCREF(__pyx_kp_u_contains_data_versioned_as);
      __pyx_t_11 += 28;
      __Pyx_GIVEREF(__pyx_kp_u_contains_data_versioned_as);
      PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_kp_u_contains_data_versioned_as);

      /* "pytact/data_reader.pyx":177
 *                     f"This library is compiled for a dataset containing data versioned as "
 *                     f"{graph_api_capnp.currentVersion} but file {f} contains data versioned as "
 *                     f"{reader.data_version}.")             # <<<<<<<<<<<<<<
 *             relative_self = Path(reader.dependencies[0])
 *             if f != relative_self:
 */
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_reader, __pyx_n_s_data_version); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_8 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 177, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) : __pyx_t_12;
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_kp_u__5);
      __pyx_t_11 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__5);
      PyTuple_SET_ITEM(__pyx_t_7, 6, __pyx_kp_u__5);

      /* "pytact/data_reader.pyx":175
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "             # <<<<<<<<<<<<<<
 *                     f"{graph_api_capnp.currentVersion} but file {f} contains data versioned as "
 *                     f"{reader.data_version}.")
 */
      __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 7, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 175, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

      /* "pytact/data_reader.pyx":174
 *         for f, reader in dataset:
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     f"This library is compiled for a dataset containing data versioned as "
 *                     f"{graph_api_capnp.currentVersion} but file {f} contains data versioned as "
 */
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 174, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_Raise(__pyx_t_7, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __PYX_ERR(0, 174, __pyx_L1_error)

      /* "pytact/data_reader.pyx":173
 *             raise ValueError(f"There does not appear to be a dataset located at {dataset_path}")
 *         for f, reader in dataset:
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "
 */
    }

    /* "pytact/data_reader.pyx":178
 *                     f"{graph_api_capnp.currentVersion} but file {f} contains data versioned as "
 *                     f"{reader.data_version}.")
 *             relative_self = Path(reader.dependencies[0])             # <<<<<<<<<<<<<<
 *             if f != relative_self:
 *                 real_root = Path(*(dataset_path/f).parts[:-len(relative_self.parts)])
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_reader, __pyx_n_s_dependencies); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9};
      __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 178, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_XDECREF_SET(__pyx_v_relative_self, __pyx_t_7);
    __pyx_t_7 = 0;

    /* "pytact/data_reader.pyx":179
 *                     f"{reader.data_version}.")
 *             relative_self = Path(reader.dependencies[0])
 *             if f != relative_self:             # <<<<<<<<<<<<<<
 *                 real_root = Path(*(dataset_path/f).parts[:-len(relative_self.parts)])
 *                 raise ValueError(
 */
    __pyx_t_7 = PyObject_RichCompare(__pyx_v_f, __pyx_v_relative_self, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 179, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 179, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__pyx_t_2)) {

      /* "pytact/data_reader.pyx":180
 *             relative_self = Path(reader.dependencies[0])
 *             if f != relative_self:
 *                 real_root = Path(*(dataset_path/f).parts[:-len(relative_self.parts)])             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     f"Path {dataset_path} doesn't appear to be the root of a dataset. "
 */
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Path); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_v_dataset_path, __pyx_v_f); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_parts); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_relative_self, __pyx_n_s_parts); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_11 = PyObject_Length(__pyx_t_8); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetSlice(__pyx_t_9, 0, (-__pyx_t_11), NULL, NULL, NULL, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 180, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_real_root = __pyx_t_8;
      __pyx_t_8 = 0;

      /* "pytact/data_reader.pyx":182
 *                 real_root = Path(*(dataset_path/f).parts[:-len(relative_self.parts)])
 *                 raise ValueError(
 *                     f"Path {dataset_path} doesn't appear to be the root of a dataset. "             # <<<<<<<<<<<<<<
 *                     f"File {dataset_path/f} suggests that the real root might be {real_root}.")
 * 
 */
      __pyx_t_8 = PyTuple_New(7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_11 = 0;
      __pyx_t_12 = 127;
      __Pyx_INCREF(__pyx_kp_u_Path_2);
      __pyx_t_11 += 5;
      __Pyx_GIVEREF(__pyx_kp_u_Path_2);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_u_Path_2);
      __pyx_t_9 = __Pyx_PyObject_FormatSimple(__pyx_v_dataset_path, __pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) : __pyx_t_12;
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_INCREF(__pyx_kp_u_doesn_t_appear_to_be_the_root_o);
      __pyx_t_11 += 50;
      __Pyx_GIVEREF(__pyx_kp_u_doesn_t_appear_to_be_the_root_o);
      PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_kp_u_doesn_t_appear_to_be_the_root_o);

      /* "pytact/data_reader.pyx":183
 *                 raise ValueError(
 *                     f"Path {dataset_path} doesn't appear to be the root of a dataset. "
 *                     f"File {dataset_path/f} suggests that the real root might be {real_root}.")             # <<<<<<<<<<<<<<
 * 
 *         self.graphs = [g for _, g in dataset]
 */
      __pyx_t_9 = __Pyx_PyNumber_Divide(__pyx_v_dataset_path, __pyx_v_f); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_t_9, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_12;
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_INCREF(__pyx_kp_u_suggests_that_the_real_root_mig);
      __pyx_t_11 += 38;
      __Pyx_GIVEREF(__pyx_kp_u_suggests_that_the_real_root_mig);
      PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_kp_u_suggests_that_the_real_root_mig);
      __pyx_t_7 = __Pyx_PyObject_FormatSimple(__pyx_v_real_root, __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 183, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_12 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_12) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_12;
      __pyx_t_11 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_INCREF(__pyx_kp_u__5);
      __pyx_t_11 += 1;
      __Pyx_GIVEREF(__pyx_kp_u__5);
      PyTuple_SET_ITEM(__pyx_t_8, 6, __pyx_kp_u__5);

      /* "pytact/data_reader.pyx":182
 *                 real_root = Path(*(dataset_path/f).parts[:-len(relative_self.parts)])
 *                 raise ValueError(
 *                     f"Path {dataset_path} doesn't appear to be the root of a dataset. "             # <<<<<<<<<<<<<<
 *                     f"File {dataset_path/f} suggests that the real root might be {real_root}.")
 * 
 */
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "pytact/data_reader.pyx":181
 *             if f != relative_self:
 *                 real_root = Path(*(dataset_path/f).parts[:-len(relative_self.parts)])
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     f"Path {dataset_path} doesn't appear to be the root of a dataset. "
 *                     f"File {dataset_path/f} suggests that the real root might be {real_root}.")
 */
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 181, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(0, 181, __pyx_L1_error)

      /* "pytact/data_reader.pyx":179
 *                     f"{reader.data_version}.")
 *             relative_self = Path(reader.dependencies[0])
 *             if f != relative_self:             # <<<<<<<<<<<<<<
 *                 real_root = Path(*(dataset_path/f).parts[:-len(relative_self.parts)])
 *                 raise ValueError(
 */
    }

    /* "pytact/data_reader.pyx":172
 *         if not dataset:
 *             raise ValueError(f"There does not appear to be a dataset located at {dataset_path}")
 *         for f, reader in dataset:             # <<<<<<<<<<<<<<
 *             if reader.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(
 */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":185
 *                     f"File {dataset_path/f} suggests that the real root might be {real_root}.")
 * 
 *         self.graphs = [g for _, g in dataset]             # <<<<<<<<<<<<<<
 *         self.graphid_by_filename = {f: i for i, (f, _) in enumerate(dataset)}
 *         self.graph_files = [f for f, _ in dataset]
 */
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L12_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_v_dataset)) || PyTuple_CheckExact(__pyx_v_dataset)) {
      __pyx_t_8 = __pyx_v_dataset; __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_dataset); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 185, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 185, __pyx_L12_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 185, __pyx_L12_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 185, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 185, __pyx_L12_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 185, __pyx_L12_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        }
      } else {
        __pyx_t_7 = __pyx_t_6(__pyx_t_8);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 185, __pyx_L12_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
        PyObject* sequence = __pyx_t_7;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 185, __pyx_L12_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_4);
        #else
        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 185, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_14 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 185, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_14);
        index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_9)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        index = 1; __pyx_t_4 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_14), 2) < 0) __PYX_ERR(0, 185, __pyx_L12_error)
        __pyx_t_10 = NULL;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        goto __pyx_L16_unpacking_done;
        __pyx_L15_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_10 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 185, __pyx_L12_error)
        __pyx_L16_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v__, __pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_g, __pyx_t_4);
      __pyx_t_4 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_7genexpr__pyx_v_g))) __PYX_ERR(0, 185, __pyx_L12_error)
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v__); __pyx_7genexpr__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_g); __pyx_7genexpr__pyx_v_g = 0;
    goto __pyx_L17_exit_scope;
    __pyx_L12_error:;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v__); __pyx_7genexpr__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_7genexpr__pyx_v_g); __pyx_7genexpr__pyx_v_g = 0;
    goto __pyx_L1_error;
    __pyx_L17_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->graphs);
  __Pyx_DECREF(__pyx_v_self->graphs);
  __pyx_v_self->graphs = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":186
 * 
 *         self.graphs = [g for _, g in dataset]
 *         self.graphid_by_filename = {f: i for i, (f, _) in enumerate(dataset)}             # <<<<<<<<<<<<<<
 *         self.graph_files = [f for f, _ in dataset]
 * 
 */
  { /* enter inner scope */
    __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 186, __pyx_L20_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_int_0);
    __pyx_t_8 = __pyx_int_0;
    if (likely(PyList_CheckExact(__pyx_v_dataset)) || PyTuple_CheckExact(__pyx_v_dataset)) {
      __pyx_t_7 = __pyx_v_dataset; __Pyx_INCREF(__pyx_t_7); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_dataset); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 186, __pyx_L20_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 186, __pyx_L20_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_7))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_7)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 186, __pyx_L20_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L20_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 186, __pyx_L20_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L20_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_6(__pyx_t_7);
        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, 186, __pyx_L20_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
        PyObject* sequence = __pyx_t_4;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 186, __pyx_L20_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_14);
        #else
        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 186, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 186, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_14);
        #endif
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_15 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 186, __pyx_L20_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_15);
        index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_15); if (unlikely(!__pyx_t_9)) goto __pyx_L23_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        index = 1; __pyx_t_14 = __pyx_t_10(__pyx_t_15); if (unlikely(!__pyx_t_14)) goto __pyx_L23_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_14);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_15), 2) < 0) __PYX_ERR(0, 186, __pyx_L20_error)
        __pyx_t_10 = NULL;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        goto __pyx_L24_unpacking_done;
        __pyx_L23_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_10 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 186, __pyx_L20_error)
        __pyx_L24_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_f, __pyx_t_9);
      __pyx_t_9 = 0;
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v__, __pyx_t_14);
      __pyx_t_14 = 0;
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_i, __pyx_t_8);
      __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_8, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L20_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8);
      __pyx_t_8 = __pyx_t_4;
      __pyx_t_4 = 0;
      if (unlikely(PyDict_SetItem(__pyx_t_3, (PyObject*)__pyx_8genexpr1__pyx_v_f, (PyObject*)__pyx_8genexpr1__pyx_v_i))) __PYX_ERR(0, 186, __pyx_L20_error)
    }
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v__); __pyx_8genexpr1__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_f); __pyx_8genexpr1__pyx_v_f = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0;
    goto __pyx_L25_exit_scope;
    __pyx_L20_error:;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v__); __pyx_8genexpr1__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_f); __pyx_8genexpr1__pyx_v_f = 0;
    __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0;
    goto __pyx_L1_error;
    __pyx_L25_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->graphid_by_filename);
  __Pyx_DECREF(__pyx_v_self->graphid_by_filename);
  __pyx_v_self->graphid_by_filename = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":187
 *         self.graphs = [g for _, g in dataset]
 *         self.graphid_by_filename = {f: i for i, (f, _) in enumerate(dataset)}
 *         self.graph_files = [f for f, _ in dataset]             # <<<<<<<<<<<<<<
 * 
 *         cdef vector[C_Graph_Node_Reader_List] c_nodes
 */
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 187, __pyx_L28_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_v_dataset)) || PyTuple_CheckExact(__pyx_v_dataset)) {
      __pyx_t_8 = __pyx_v_dataset; __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_dataset); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 187, __pyx_L28_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L28_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 187, __pyx_L28_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 187, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 187, __pyx_L28_error)
          #else
          __pyx_t_7 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 187, __pyx_L28_error)
          __Pyx_GOTREF(__pyx_t_7);
          #endif
        }
      } else {
        __pyx_t_7 = __pyx_t_6(__pyx_t_8);
        if (unlikely(!__pyx_t_7)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 187, __pyx_L28_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_7);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
        PyObject* sequence = __pyx_t_7;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 187, __pyx_L28_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_14);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L28_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 187, __pyx_L28_error)
        __Pyx_GOTREF(__pyx_t_14);
        #endif
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_9 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 187, __pyx_L28_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
        index = 0; __pyx_t_4 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L31_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_14 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_14)) goto __pyx_L31_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_14);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 187, __pyx_L28_error)
        __pyx_t_10 = NULL;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L32_unpacking_done;
        __pyx_L31_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_10 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 187, __pyx_L28_error)
        __pyx_L32_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_f, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v__, __pyx_t_14);
      __pyx_t_14 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_8genexpr2__pyx_v_f))) __PYX_ERR(0, 187, __pyx_L28_error)
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v__); __pyx_8genexpr2__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_f); __pyx_8genexpr2__pyx_v_f = 0;
    goto __pyx_L33_exit_scope;
    __pyx_L28_error:;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v__); __pyx_8genexpr2__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_f); __pyx_8genexpr2__pyx_v_f = 0;
    goto __pyx_L1_error;
    __pyx_L33_exit_scope:;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->graph_files);
  __Pyx_DECREF(__pyx_v_self->graph_files);
  __pyx_v_self->graph_files = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":190
 * 
 *         cdef vector[C_Graph_Node_Reader_List] c_nodes
 *         c_nodes.reserve(len(dataset))             # <<<<<<<<<<<<<<
 *         cdef vector[C_Graph_EdgeTarget_Reader_List] c_edges
 *         c_edges.reserve(len(dataset))
 */
  __pyx_t_5 = PyObject_Length(__pyx_v_dataset); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 190, __pyx_L1_error)
  try {
    __pyx_v_c_nodes.reserve(__pyx_t_5);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 190, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":192
 *         c_nodes.reserve(len(dataset))
 *         cdef vector[C_Graph_EdgeTarget_Reader_List] c_edges
 *         c_edges.reserve(len(dataset))             # <<<<<<<<<<<<<<
 *         cdef vector[uint32_t] c_representatives
 *         c_representatives.reserve(len(dataset))
 */
  __pyx_t_5 = PyObject_Length(__pyx_v_dataset); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 192, __pyx_L1_error)
  try {
    __pyx_v_c_edges.reserve(__pyx_t_5);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 192, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":194
 *         c_edges.reserve(len(dataset))
 *         cdef vector[uint32_t] c_representatives
 *         c_representatives.reserve(len(dataset))             # <<<<<<<<<<<<<<
 *         for _, g in dataset:
 *             d = (<Dataset_Reader>g).source
 */
  __pyx_t_5 = PyObject_Length(__pyx_v_dataset); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 194, __pyx_L1_error)
  try {
    __pyx_v_c_representatives.reserve(__pyx_t_5);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 194, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":195
 *         cdef vector[uint32_t] c_representatives
 *         c_representatives.reserve(len(dataset))
 *         for _, g in dataset:             # <<<<<<<<<<<<<<
 *             d = (<Dataset_Reader>g).source
 *             c_nodes.push_back(d.getGraph().getNodes())
 */
  if (likely(PyList_CheckExact(__pyx_v_dataset)) || PyTuple_CheckExact(__pyx_v_dataset)) {
    __pyx_t_3 = __pyx_v_dataset; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_dataset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_3))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 195, __pyx_L1_error)
        #else
        __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_8); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 195, __pyx_L1_error)
        #else
        __pyx_t_8 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        #endif
      }
    } else {
      __pyx_t_8 = __pyx_t_6(__pyx_t_3);
      if (unlikely(!__pyx_t_8)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 195, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_8);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
      PyObject* sequence = __pyx_t_8;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 195, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_14);
      #else
      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      #endif
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_4 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4);
      index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_7)) goto __pyx_L36_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_14 = __pyx_t_10(__pyx_t_4); if (unlikely(!__pyx_t_14)) goto __pyx_L36_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_14);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_4), 2) < 0) __PYX_ERR(0, 195, __pyx_L1_error)
      __pyx_t_10 = NULL;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L37_unpacking_done;
      __pyx_L36_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_10 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 195, __pyx_L1_error)
      __pyx_L37_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_g, __pyx_t_14);
    __pyx_t_14 = 0;

    /* "pytact/data_reader.pyx":196
 *         c_representatives.reserve(len(dataset))
 *         for _, g in dataset:
 *             d = (<Dataset_Reader>g).source             # <<<<<<<<<<<<<<
 *             c_nodes.push_back(d.getGraph().getNodes())
 *             c_edges.push_back(d.getGraph().getEdges())
 */
    __pyx_t_16 = ((struct __pyx_obj_6pytact_22graph_api_capnp_cython_Dataset_Reader *)__pyx_v_g)->source;
    __pyx_v_d = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_16);

    /* "pytact/data_reader.pyx":197
 *         for _, g in dataset:
 *             d = (<Dataset_Reader>g).source
 *             c_nodes.push_back(d.getGraph().getNodes())             # <<<<<<<<<<<<<<
 *             c_edges.push_back(d.getGraph().getEdges())
 *             c_representatives.push_back(d.getRepresentative())
 */
    try {
      __pyx_t_17 = __pyx_v_d.getGraph();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 197, __pyx_L1_error)
    }
    try {
      __pyx_t_18 = __pyx_t_17.getNodes();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 197, __pyx_L1_error)
    }
    try {
      __pyx_v_c_nodes.push_back(__pyx_t_18);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 197, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":198
 *             d = (<Dataset_Reader>g).source
 *             c_nodes.push_back(d.getGraph().getNodes())
 *             c_edges.push_back(d.getGraph().getEdges())             # <<<<<<<<<<<<<<
 *             c_representatives.push_back(d.getRepresentative())
 * 
 */
    try {
      __pyx_t_17 = __pyx_v_d.getGraph();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 198, __pyx_L1_error)
    }
    try {
      __pyx_t_19 = __pyx_t_17.getEdges();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 198, __pyx_L1_error)
    }
    try {
      __pyx_v_c_edges.push_back(__pyx_t_19);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 198, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":199
 *             c_nodes.push_back(d.getGraph().getNodes())
 *             c_edges.push_back(d.getGraph().getEdges())
 *             c_representatives.push_back(d.getRepresentative())             # <<<<<<<<<<<<<<
 * 
 *         local_to_global = [[self.graphid_by_filename[Path(f)] for f in g.dependencies] for _, g in dataset]
 */
    try {
      __pyx_t_20 = __pyx_v_d.getRepresentative();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 199, __pyx_L1_error)
    }
    try {
      __pyx_v_c_representatives.push_back(__pyx_t_20);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 199, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":195
 *         cdef vector[uint32_t] c_representatives
 *         c_representatives.reserve(len(dataset))
 *         for _, g in dataset:             # <<<<<<<<<<<<<<
 *             d = (<Dataset_Reader>g).source
 *             c_nodes.push_back(d.getGraph().getNodes())
 */
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":201
 *             c_representatives.push_back(d.getRepresentative())
 * 
 *         local_to_global = [[self.graphid_by_filename[Path(f)] for f in g.dependencies] for _, g in dataset]             # <<<<<<<<<<<<<<
 *         self.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, local_to_global)
 * 
 */
  { /* enter inner scope */
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L40_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (likely(PyList_CheckExact(__pyx_v_dataset)) || PyTuple_CheckExact(__pyx_v_dataset)) {
      __pyx_t_8 = __pyx_v_dataset; __Pyx_INCREF(__pyx_t_8); __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_v_dataset); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 201, __pyx_L40_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 201, __pyx_L40_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_14 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_14); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 201, __pyx_L40_error)
          #else
          __pyx_t_14 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 201, __pyx_L40_error)
          __Pyx_GOTREF(__pyx_t_14);
          #endif
        } else {
          if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_14 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_5); __Pyx_INCREF(__pyx_t_14); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 201, __pyx_L40_error)
          #else
          __pyx_t_14 = PySequence_ITEM(__pyx_t_8, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 201, __pyx_L40_error)
          __Pyx_GOTREF(__pyx_t_14);
          #endif
        }
      } else {
        __pyx_t_14 = __pyx_t_6(__pyx_t_8);
        if (unlikely(!__pyx_t_14)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 201, __pyx_L40_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_14);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) {
        PyObject* sequence = __pyx_t_14;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 201, __pyx_L40_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_4);
        #else
        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 201, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_4);
        #endif
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_9 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 201, __pyx_L40_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
        index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L43_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_7);
        index = 1; __pyx_t_4 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L43_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 201, __pyx_L40_error)
        __pyx_t_10 = NULL;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L44_unpacking_done;
        __pyx_L43_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_10 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 201, __pyx_L40_error)
        __pyx_L44_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v__, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_g, __pyx_t_4);
      __pyx_t_4 = 0;
      { /* enter inner scope */
        __pyx_t_14 = PyList_New(0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 201, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr3__pyx_v_g, __pyx_n_s_dependencies); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L47_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
          __pyx_t_7 = __pyx_t_4; __Pyx_INCREF(__pyx_t_7); __pyx_t_11 = 0;
          __pyx_t_21 = NULL;
        } else {
          __pyx_t_11 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 201, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_21 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 201, __pyx_L47_error)
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        for (;;) {
          if (likely(!__pyx_t_21)) {
            if (likely(PyList_CheckExact(__pyx_t_7))) {
              if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_7)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely((0 < 0))) __PYX_ERR(0, 201, __pyx_L47_error)
              #else
              __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L47_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            } else {
              if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely((0 < 0))) __PYX_ERR(0, 201, __pyx_L47_error)
              #else
              __pyx_t_4 = PySequence_ITEM(__pyx_t_7, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L47_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            }
          } else {
            __pyx_t_4 = __pyx_t_21(__pyx_t_7);
            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, 201, __pyx_L47_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_4);
          }
          __Pyx_XDECREF_SET(__pyx_8genexpr4__pyx_v_f, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Path); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 201, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_15 = NULL;
          __pyx_t_13 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_9);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_9, function);
              __pyx_t_13 = 1;
            }
          }
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_8genexpr4__pyx_v_f};
            __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13);
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L47_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          }
          __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_self->graphid_by_filename, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 201, __pyx_L47_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_14, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 201, __pyx_L47_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_f); __pyx_8genexpr4__pyx_v_f = 0;
        goto __pyx_L50_exit_scope;
        __pyx_L47_error:;
        __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_f); __pyx_8genexpr4__pyx_v_f = 0;
        goto __pyx_L40_error;
        __pyx_L50_exit_scope:;
      } /* exit inner scope */
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_14))) __PYX_ERR(0, 201, __pyx_L40_error)
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v__); __pyx_8genexpr3__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_g); __pyx_8genexpr3__pyx_v_g = 0;
    goto __pyx_L51_exit_scope;
    __pyx_L40_error:;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v__); __pyx_8genexpr3__pyx_v__ = 0;
    __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_g); __pyx_8genexpr3__pyx_v_g = 0;
    goto __pyx_L1_error;
    __pyx_L51_exit_scope:;
  } /* exit inner scope */
  __pyx_v_local_to_global = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":202
 * 
 *         local_to_global = [[self.graphid_by_filename[Path(f)] for f in g.dependencies] for _, g in dataset]
 *         self.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, local_to_global)             # <<<<<<<<<<<<<<
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:
 */
  __pyx_t_22.nodes = __pyx_v_c_nodes;
  __pyx_t_22.edges = __pyx_v_c_edges;
  __pyx_t_22.representatives = __pyx_v_c_representatives;
  __pyx_t_23 = __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(__pyx_v_local_to_global); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 202, __pyx_L1_error)
  __pyx_t_22.local_to_global = __pyx_t_23;
  __pyx_v_self->graph_index = __pyx_t_22;

  /* "pytact/data_reader.pyx":167
 *     """Map's a graph-id to a filename. Inverse of `graphid_by_filename`."""
 * 
 *     def __cinit__(self, dataset_path : Path, dataset: list[tuple[Path, Dataset_Reader]]):             # <<<<<<<<<<<<<<
 *         """Do not call this initializer directly. Use `lowlevel_data_reader` instead."""
 *         # Basic, quick sanity check
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_f);
  __Pyx_XDECREF(__pyx_v_reader);
  __Pyx_XDECREF(__pyx_v_relative_self);
  __Pyx_XDECREF(__pyx_v_real_root);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_g);
  __Pyx_XDECREF(__pyx_v_local_to_global);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v__);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_g);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_f);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v__);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_f);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v__);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v__);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_g);
  __Pyx_XDECREF(__pyx_8genexpr4__pyx_v_f);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":204
 *         self.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, local_to_global)
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         """Convert dependency-index relative to a graph-id to a new graph-id.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_3local_to_global(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_18LowlevelDataReader_2local_to_global, "Convert dependency-index relative to a graph-id to a new graph-id.\n\n        This is used to find the graph-id where a particular node can be found. If `graph` is the\n        graph-id that contains a reference to a node and `dep_index` is the relative location\n        where that node can be found then `local_to_global(graph, dep_index)` finds the graph-id\n        of the file where the node is physically located.\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_18LowlevelDataReader_3local_to_global = {"local_to_global", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_3local_to_global, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_18LowlevelDataReader_2local_to_global};
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_3local_to_global(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_graph = 0;
  PyObject *__pyx_v_dep_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("local_to_global (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_graph,&__pyx_n_s_dep_index,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_graph,&__pyx_n_s_dep_index,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_graph)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 204, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dep_index)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 204, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("local_to_global", 1, 2, 2, 1); __PYX_ERR(0, 204, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "local_to_global") < 0)) __PYX_ERR(0, 204, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_graph = ((PyObject*)values[0]);
    __pyx_v_dep_index = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("local_to_global", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 204, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.local_to_global", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_graph), (&PyInt_Type), 0, "graph", 1))) __PYX_ERR(0, 204, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dep_index), (&PyInt_Type), 0, "dep_index", 1))) __PYX_ERR(0, 204, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_2local_to_global(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self), __pyx_v_graph, __pyx_v_dep_index);

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

static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_2local_to_global(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, PyObject *__pyx_v_graph, PyObject *__pyx_v_dep_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<std::vector<uint32_t> > ::size_type __pyx_t_1;
  std::vector<uint32_t> ::size_type __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("local_to_global", 0);

  /* "pytact/data_reader.pyx":212
 *         of the file where the node is physically located.
 *         """
 *         return self.graph_index.local_to_global[graph][dep_index]             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, graph):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_As_size_t(__pyx_v_graph); if (unlikely((__pyx_t_1 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 212, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_As_size_t(__pyx_v_dep_index); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 212, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(((__pyx_v_self->graph_index.local_to_global[__pyx_t_1])[__pyx_t_2])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(PyInt_CheckExact(__pyx_t_3)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_t_3))) __PYX_ERR(0, 212, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":204
 *         self.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, local_to_global)
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         """Convert dependency-index relative to a graph-id to a new graph-id.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.local_to_global", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":214
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 *     def __getitem__(self, graph):             # <<<<<<<<<<<<<<
 *         """Retrieve the raw Cap'n Proto structures associated with a graph-id."""
 *         return self.graphs[graph]
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_graph); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_18LowlevelDataReader_4__getitem__, "Retrieve the raw Cap'n Proto structures associated with a graph-id.");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_6pytact_11data_reader_18LowlevelDataReader_4__getitem__;
#endif
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_graph) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_4__getitem__(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self), ((PyObject *)__pyx_v_graph));

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

static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_4__getitem__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, PyObject *__pyx_v_graph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":216
 *     def __getitem__(self, graph):
 *         """Retrieve the raw Cap'n Proto structures associated with a graph-id."""
 *         return self.graphs[graph]             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self) -> int:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_self->graphs, __pyx_v_graph); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":214
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 *     def __getitem__(self, graph):             # <<<<<<<<<<<<<<
 *         """Retrieve the raw Cap'n Proto structures associated with a graph-id."""
 *         return self.graphs[graph]
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":218
 *         return self.graphs[graph]
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return len(self.graphs)
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_7__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_7__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_6__len__(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_6__len__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__len__", 0);

  /* "pytact/data_reader.pyx":219
 * 
 *     def __len__(self) -> int:
 *         return len(self.graphs)             # <<<<<<<<<<<<<<
 * 
 * def setup_dataset(dataset_path: Path):
 */
  __pyx_t_1 = __pyx_v_self->graphs;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":218
 *         return self.graphs[graph]
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return len(self.graphs)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":161
 * 
 *     cdef object graphs # : list[Dataset_Reader]
 *     cdef readonly object graphid_by_filename # : dict[Path, int]             # <<<<<<<<<<<<<<
 *     """Map from filenames in the data directory to their graph-id's."""
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_19graphid_by_filename_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_19graphid_by_filename_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_19graphid_by_filename___get__(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_19graphid_by_filename___get__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->graphid_by_filename);
  __pyx_r = __pyx_v_self->graphid_by_filename;
  goto __pyx_L0;

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

/* "pytact/data_reader.pyx":164
 *     """Map from filenames in the data directory to their graph-id's."""
 * 
 *     cdef readonly object graph_files # : list[Path]             # <<<<<<<<<<<<<<
 *     """Map's a graph-id to a filename. Inverse of `graphid_by_filename`."""
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_11graph_files_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_11graph_files_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_11graph_files___get__(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_11graph_files___get__(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->graph_files);
  __pyx_r = __pyx_v_self->graph_files;
  goto __pyx_L0;

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_9__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_18LowlevelDataReader_9__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_9__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_9__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_8__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_11__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_18LowlevelDataReader_11__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_11__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_11__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_18LowlevelDataReader_10__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_18LowlevelDataReader_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.LowlevelDataReader.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":221
 *         return len(self.graphs)
 * 
 * def setup_dataset(dataset_path: Path):             # <<<<<<<<<<<<<<
 *     if not dataset_path.exists():
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4setup_dataset(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_4setup_dataset = {"setup_dataset", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_4setup_dataset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_4setup_dataset(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_dataset_path = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("setup_dataset (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dataset_path)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 221, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "setup_dataset") < 0)) __PYX_ERR(0, 221, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_dataset_path = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("setup_dataset", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 221, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.setup_dataset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_3setup_dataset(__pyx_self, __pyx_v_dataset_path);

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

static PyObject *__pyx_pf_6pytact_11data_reader_3setup_dataset(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dataset_path) {
  PyObject *__pyx_v_mountpoint = NULL;
  PyObject *__pyx_v_args = NULL;
  PyObject *__pyx_v_result = NULL;
  CYTHON_UNUSED long __pyx_v__;
  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;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  long __pyx_t_9;
  Py_ssize_t __pyx_t_10;
  Py_UCS4 __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("setup_dataset", 0);

  /* "pytact/data_reader.pyx":222
 * 
 * def setup_dataset(dataset_path: Path):
 *     if not dataset_path.exists():             # <<<<<<<<<<<<<<
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 *     if dataset_path.is_file():
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dataset_path, __pyx_n_s_exists); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __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;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_3, };
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 222, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = (!__pyx_t_5);
  if (unlikely(__pyx_t_6)) {

    /* "pytact/data_reader.pyx":223
 * def setup_dataset(dataset_path: Path):
 *     if not dataset_path.exists():
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")             # <<<<<<<<<<<<<<
 *     if dataset_path.is_file():
 *         mountpoint = dataset_path.with_suffix('')
 */
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_dataset_path, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Dataset_does_not_exist, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 223, __pyx_L1_error)

    /* "pytact/data_reader.pyx":222
 * 
 * def setup_dataset(dataset_path: Path):
 *     if not dataset_path.exists():             # <<<<<<<<<<<<<<
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 *     if dataset_path.is_file():
 */
  }

  /* "pytact/data_reader.pyx":224
 *     if not dataset_path.exists():
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 *     if dataset_path.is_file():             # <<<<<<<<<<<<<<
 *         mountpoint = dataset_path.with_suffix('')
 *         if not mountpoint.is_dir():
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dataset_path, __pyx_n_s_is_file); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __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;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_3, };
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 224, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {

    /* "pytact/data_reader.pyx":225
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 *     if dataset_path.is_file():
 *         mountpoint = dataset_path.with_suffix('')             # <<<<<<<<<<<<<<
 *         if not mountpoint.is_dir():
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dataset_path, __pyx_n_s_with_suffix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __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;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u__6};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_v_mountpoint = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":226
 *     if dataset_path.is_file():
 *         mountpoint = dataset_path.with_suffix('')
 *         if not mountpoint.is_dir():             # <<<<<<<<<<<<<<
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")
 *         if not mountpoint.is_mount():
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_mountpoint, __pyx_n_s_is_dir); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __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;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_3, };
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 226, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = (!__pyx_t_6);
    if (unlikely(__pyx_t_5)) {

      /* "pytact/data_reader.pyx":227
 *         mountpoint = dataset_path.with_suffix('')
 *         if not mountpoint.is_dir():
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")             # <<<<<<<<<<<<<<
 *         if not mountpoint.is_mount():
 *             if shutil.which('squashfuse') is None:
 */
      __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_mountpoint, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Unable_to_mount_dataset_Mountpoi, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_Raise(__pyx_t_1, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __PYX_ERR(0, 227, __pyx_L1_error)

      /* "pytact/data_reader.pyx":226
 *     if dataset_path.is_file():
 *         mountpoint = dataset_path.with_suffix('')
 *         if not mountpoint.is_dir():             # <<<<<<<<<<<<<<
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")
 *         if not mountpoint.is_mount():
 */
    }

    /* "pytact/data_reader.pyx":228
 *         if not mountpoint.is_dir():
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")
 *         if not mountpoint.is_mount():             # <<<<<<<<<<<<<<
 *             if shutil.which('squashfuse') is None:
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_mountpoint, __pyx_n_s_is_mount); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 228, __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;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_3, };
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 228, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = (!__pyx_t_5);
    if (__pyx_t_6) {

      /* "pytact/data_reader.pyx":229
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")
 *         if not mountpoint.is_mount():
 *             if shutil.which('squashfuse') is None:             # <<<<<<<<<<<<<<
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]
 */
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_shutil); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_which); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 229, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_n_u_squashfuse};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 229, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __pyx_t_6 = (__pyx_t_1 == Py_None);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(__pyx_t_6)) {

        /* "pytact/data_reader.pyx":230
 *         if not mountpoint.is_mount():
 *             if shutil.which('squashfuse') is None:
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")             # <<<<<<<<<<<<<<
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]
 *             result = subprocess.run(args,
 */
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __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, 230, __pyx_L1_error)

        /* "pytact/data_reader.pyx":229
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")
 *         if not mountpoint.is_mount():
 *             if shutil.which('squashfuse') is None:             # <<<<<<<<<<<<<<
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]
 */
      }

      /* "pytact/data_reader.pyx":231
 *             if shutil.which('squashfuse') is None:
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]             # <<<<<<<<<<<<<<
 *             result = subprocess.run(args,
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 */
      __pyx_t_1 = __Pyx_PyObject_Str(__pyx_v_dataset_path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_Str(__pyx_v_mountpoint); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 231, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 231, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_n_u_squashfuse);
      __Pyx_GIVEREF(__pyx_n_u_squashfuse);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_squashfuse);
      __Pyx_GIVEREF(__pyx_t_1);
      PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_2, 2, __pyx_t_3);
      __pyx_t_1 = 0;
      __pyx_t_3 = 0;
      __pyx_v_args = ((PyObject*)__pyx_t_2);
      __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":232
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]
 *             result = subprocess.run(args,             # <<<<<<<<<<<<<<
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 *             if result.returncode != 0:
 */
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_subprocess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_run); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_args);
      __Pyx_GIVEREF(__pyx_v_args);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_args);

      /* "pytact/data_reader.pyx":233
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]
 *             result = subprocess.run(args,
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)             # <<<<<<<<<<<<<<
 *             if result.returncode != 0:
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +
 */
      __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_subprocess); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_PIPE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_stdout, __pyx_t_8) < 0) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_subprocess); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_PIPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_stderr, __pyx_t_7) < 0) __PYX_ERR(0, 233, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

      /* "pytact/data_reader.pyx":232
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]
 *             result = subprocess.run(args,             # <<<<<<<<<<<<<<
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 *             if result.returncode != 0:
 */
      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 232, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_result = __pyx_t_7;
      __pyx_t_7 = 0;

      /* "pytact/data_reader.pyx":234
 *             result = subprocess.run(args,
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 *             if result.returncode != 0:             # <<<<<<<<<<<<<<
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +
 *                                  ' '.join(args) +
 */
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_returncode); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 234, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_1 = __Pyx_PyInt_NeObjC(__pyx_t_7, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 234, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(__pyx_t_6)) {

        /* "pytact/data_reader.pyx":236
 *             if result.returncode != 0:
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +
 *                                  ' '.join(args) +             # <<<<<<<<<<<<<<
 *                                  f"\nSquashfuse error: \n" +
 *                                  result.stderr.decode())
 */
        __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__8, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);

        /* "pytact/data_reader.pyx":235
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 *             if result.returncode != 0:
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +             # <<<<<<<<<<<<<<
 *                                  ' '.join(args) +
 *                                  f"\nSquashfuse error: \n" +
 */
        __pyx_t_7 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Unable_to_mount_dataset_Squashfu, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 235, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "pytact/data_reader.pyx":236
 *             if result.returncode != 0:
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +
 *                                  ' '.join(args) +             # <<<<<<<<<<<<<<
 *                                  f"\nSquashfuse error: \n" +
 *                                  result.stderr.decode())
 */
        __pyx_t_1 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_7, __pyx_kp_u_Squashfuse_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

        /* "pytact/data_reader.pyx":238
 *                                  ' '.join(args) +
 *                                  f"\nSquashfuse error: \n" +
 *                                  result.stderr.decode())             # <<<<<<<<<<<<<<
 *             for _ in range(100):
 *                 if mountpoint.is_mount(): break
 */
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_stderr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 238, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_decode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 238, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = NULL;
        __pyx_t_4 = 0;
        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_4 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_2, };
          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 238, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }

        /* "pytact/data_reader.pyx":237
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +
 *                                  ' '.join(args) +
 *                                  f"\nSquashfuse error: \n" +             # <<<<<<<<<<<<<<
 *                                  result.stderr.decode())
 *             for _ in range(100):
 */
        __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

        /* "pytact/data_reader.pyx":235
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 *             if result.returncode != 0:
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +             # <<<<<<<<<<<<<<
 *                                  ' '.join(args) +
 *                                  f"\nSquashfuse error: \n" +
 */
        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 235, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_Raise(__pyx_t_7, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(0, 235, __pyx_L1_error)

        /* "pytact/data_reader.pyx":234
 *             result = subprocess.run(args,
 *                                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 *             if result.returncode != 0:             # <<<<<<<<<<<<<<
 *                 raise ValueError(f"Unable to mount dataset. Squashfuse invocation:\n" +
 *                                  ' '.join(args) +
 */
      }

      /* "pytact/data_reader.pyx":239
 *                                  f"\nSquashfuse error: \n" +
 *                                  result.stderr.decode())
 *             for _ in range(100):             # <<<<<<<<<<<<<<
 *                 if mountpoint.is_mount(): break
 *                 time.sleep(0.01)
 */
      for (__pyx_t_9 = 0; __pyx_t_9 < 0x64; __pyx_t_9+=1) {
        __pyx_v__ = __pyx_t_9;

        /* "pytact/data_reader.pyx":240
 *                                  result.stderr.decode())
 *             for _ in range(100):
 *                 if mountpoint.is_mount(): break             # <<<<<<<<<<<<<<
 *                 time.sleep(0.01)
 *             if not mountpoint.is_mount():
 */
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_mountpoint, __pyx_n_s_is_mount); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = NULL;
        __pyx_t_4 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_4 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_1, };
          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 240, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (__pyx_t_6) {
          goto __pyx_L10_break;
        }

        /* "pytact/data_reader.pyx":241
 *             for _ in range(100):
 *                 if mountpoint.is_mount(): break
 *                 time.sleep(0.01)             # <<<<<<<<<<<<<<
 *             if not mountpoint.is_mount():
 *                 raise ValueError(f"Unable to mount dataset {dataset_path}. Mount did not appear.")
 */
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sleep); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        __pyx_t_4 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
            __pyx_t_4 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_float_0_01};
          __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __pyx_L10_break:;

      /* "pytact/data_reader.pyx":242
 *                 if mountpoint.is_mount(): break
 *                 time.sleep(0.01)
 *             if not mountpoint.is_mount():             # <<<<<<<<<<<<<<
 *                 raise ValueError(f"Unable to mount dataset {dataset_path}. Mount did not appear.")
 *         return mountpoint
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mountpoint, __pyx_n_s_is_mount); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_3, };
        __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 242, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 242, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_5 = (!__pyx_t_6);
      if (unlikely(__pyx_t_5)) {

        /* "pytact/data_reader.pyx":243
 *                 time.sleep(0.01)
 *             if not mountpoint.is_mount():
 *                 raise ValueError(f"Unable to mount dataset {dataset_path}. Mount did not appear.")             # <<<<<<<<<<<<<<
 *         return mountpoint
 *     else:
 */
        __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_10 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_Unable_to_mount_dataset);
        __pyx_t_10 += 24;
        __Pyx_GIVEREF(__pyx_kp_u_Unable_to_mount_dataset);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_u_Unable_to_mount_dataset);
        __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_v_dataset_path, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
        __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_INCREF(__pyx_kp_u_Mount_did_not_appear);
        __pyx_t_10 += 23;
        __Pyx_GIVEREF(__pyx_kp_u_Mount_did_not_appear);
        PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_kp_u_Mount_did_not_appear);
        __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_7, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 243, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_Raise(__pyx_t_7, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(0, 243, __pyx_L1_error)

        /* "pytact/data_reader.pyx":242
 *                 if mountpoint.is_mount(): break
 *                 time.sleep(0.01)
 *             if not mountpoint.is_mount():             # <<<<<<<<<<<<<<
 *                 raise ValueError(f"Unable to mount dataset {dataset_path}. Mount did not appear.")
 *         return mountpoint
 */
      }

      /* "pytact/data_reader.pyx":228
 *         if not mountpoint.is_dir():
 *             raise ValueError(f"Unable to mount dataset. Mountpoint does not exist: {mountpoint}")
 *         if not mountpoint.is_mount():             # <<<<<<<<<<<<<<
 *             if shutil.which('squashfuse') is None:
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")
 */
    }

    /* "pytact/data_reader.pyx":244
 *             if not mountpoint.is_mount():
 *                 raise ValueError(f"Unable to mount dataset {dataset_path}. Mount did not appear.")
 *         return mountpoint             # <<<<<<<<<<<<<<
 *     else:
 *         return dataset_path
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_mountpoint);
    __pyx_r = __pyx_v_mountpoint;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":224
 *     if not dataset_path.exists():
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 *     if dataset_path.is_file():             # <<<<<<<<<<<<<<
 *         mountpoint = dataset_path.with_suffix('')
 *         if not mountpoint.is_dir():
 */
  }

  /* "pytact/data_reader.pyx":246
 *         return mountpoint
 *     else:
 *         return dataset_path             # <<<<<<<<<<<<<<
 * 
 * @contextmanager
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_dataset_path);
    __pyx_r = __pyx_v_dataset_path;
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":221
 *         return len(self.graphs)
 * 
 * def setup_dataset(dataset_path: Path):             # <<<<<<<<<<<<<<
 *     if not dataset_path.exists():
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pytact.data_reader.setup_dataset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mountpoint);
  __Pyx_XDECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":248
 *         return dataset_path
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def lowlevel_data_reader(dataset_path: Path) -> Generator[LowlevelDataReader, None, None]:
 *     """Map a directory of dataset files into memory, and expose their raw Cap'n Proto structures.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_6lowlevel_data_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_5lowlevel_data_reader, "Map a directory of dataset files into memory, and expose their raw Cap'n Proto structures.\n\n    Arguments:\n    `dataset_path`: Can either be a dataset directory, or a SquashFS image file. In case of an image\n                    file `dataset.squ`, the image will be mounted using `squashfuse` on directory\n                    `dataset/`, after which the contents of that directory will be read.\n\n    This is a low-level function. Prefer to use `data_reader`. See `LowlevelDataReader` for\n    further documentation.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_6lowlevel_data_reader = {"lowlevel_data_reader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_6lowlevel_data_reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_5lowlevel_data_reader};
static PyObject *__pyx_pw_6pytact_11data_reader_6lowlevel_data_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_dataset_path = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lowlevel_data_reader (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dataset_path)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 248, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "lowlevel_data_reader") < 0)) __PYX_ERR(0, 248, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_dataset_path = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("lowlevel_data_reader", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 248, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.lowlevel_data_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_5lowlevel_data_reader(__pyx_self, __pyx_v_dataset_path);

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

static PyObject *__pyx_pf_6pytact_11data_reader_5lowlevel_data_reader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dataset_path) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("lowlevel_data_reader", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 248, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_dataset_path = __pyx_v_dataset_path;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_dataset_path);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_dataset_path);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_7generator1, __pyx_codeobj__9, (PyObject *) __pyx_cur_scope, __pyx_n_s_lowlevel_data_reader, __pyx_n_s_lowlevel_data_reader, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 248, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.lowlevel_data_reader", __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_6pytact_11data_reader_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *(*__pyx_t_10)(PyObject *);
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  int __pyx_t_19;
  int __pyx_t_20;
  char const *__pyx_t_21;
  PyObject *__pyx_t_22 = NULL;
  int __pyx_t_23;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lowlevel_data_reader", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L24_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, 248, __pyx_L1_error)

  /* "pytact/data_reader.pyx":261
 *     """
 * 
 *     mountpoint = setup_dataset(dataset_path)             # <<<<<<<<<<<<<<
 *     fnames = [f for f in mountpoint.glob('**[inserted by cython to avoid comment closer]/[inserted by cython to avoid comment start]*.bin') if f.is_file()]
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_setup_dataset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __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;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_dataset_path};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_mountpoint = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":262
 * 
 *     mountpoint = setup_dataset(dataset_path)
 *     fnames = [f for f in mountpoint.glob('**[inserted by cython to avoid comment closer]/[inserted by cython to avoid comment start]*.bin') if f.is_file()]             # <<<<<<<<<<<<<<
 * 
 *     # Increase the open file limit, because we could be intentionally mapping a large number of files
 */
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_mountpoint, __pyx_n_s_glob); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_kp_u_bin};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    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, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 262, __pyx_L1_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, 262, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_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, 262, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_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, 262, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_8genexpr5__pyx_v_f);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_8genexpr5__pyx_v_f, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_8genexpr5__pyx_v_f, __pyx_n_s_is_file); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_8, };
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 262, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_9) {
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_cur_scope->__pyx_8genexpr5__pyx_v_f))) __PYX_ERR(0, 262, __pyx_L1_error)
      }
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } /* exit inner scope */
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_fnames = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":265
 * 
 *     # Increase the open file limit, because we could be intentionally mapping a large number of files
 *     soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)             # <<<<<<<<<<<<<<
 *     new_soft = min(soft + len(fnames), hard)
 *     resource.setrlimit(resource.RLIMIT_NOFILE, (new_soft, hard))
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_resource); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getrlimit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_resource); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_RLIMIT_NOFILE); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __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;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 265, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3);
    index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_5 = __pyx_t_10(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_3), 2) < 0) __PYX_ERR(0, 265, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 265, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_soft = __pyx_t_2;
  __pyx_t_2 = 0;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_cur_scope->__pyx_v_hard = __pyx_t_5;
  __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":266
 *     # Increase the open file limit, because we could be intentionally mapping a large number of files
 *     soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
 *     new_soft = min(soft + len(fnames), hard)             # <<<<<<<<<<<<<<
 *     resource.setrlimit(resource.RLIMIT_NOFILE, (new_soft, hard))
 * 
 */
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_hard);
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_hard;
  __pyx_t_6 = PyList_GET_SIZE(__pyx_cur_scope->__pyx_v_fnames); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 266, __pyx_L1_error)
  __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyNumber_Add(__pyx_cur_scope->__pyx_v_soft, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_9) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_5 = __pyx_t_2;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_new_soft = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":267
 *     soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
 *     new_soft = min(soft + len(fnames), hard)
 *     resource.setrlimit(resource.RLIMIT_NOFILE, (new_soft, hard))             # <<<<<<<<<<<<<<
 * 
 *     try:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_resource); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_setrlimit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_resource); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_RLIMIT_NOFILE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_new_soft);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_new_soft);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_new_soft);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_hard);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_hard);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_cur_scope->__pyx_v_hard);
  __pyx_t_8 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_3, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __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;

  /* "pytact/data_reader.pyx":269
 *     resource.setrlimit(resource.RLIMIT_NOFILE, (new_soft, hard))
 * 
 *     try:             # <<<<<<<<<<<<<<
 *         with ExitStack() as stack:
 *             dataset = [(fname.relative_to(mountpoint),
 */
  /*try:*/ {

    /* "pytact/data_reader.pyx":270
 * 
 *     try:
 *         with ExitStack() as stack:             # <<<<<<<<<<<<<<
 *             dataset = [(fname.relative_to(mountpoint),
 *                         stack.enter_context(file_dataset_reader(fname)))
 */
    /*with:*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ExitStack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = NULL;
      __pyx_t_4 = 0;
      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_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_5, };
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __pyx_t_11 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 270, __pyx_L10_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_3, };
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __pyx_t_5 = __pyx_t_2;
      __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      /*try:*/ {
        {
          __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_13);
          __Pyx_XGOTREF(__pyx_t_14);
          /*try:*/ {
            __Pyx_GIVEREF(__pyx_t_5);
            __pyx_cur_scope->__pyx_v_stack = __pyx_t_5;
            __pyx_t_5 = 0;

            /* "pytact/data_reader.pyx":271
 *     try:
 *         with ExitStack() as stack:
 *             dataset = [(fname.relative_to(mountpoint),             # <<<<<<<<<<<<<<
 *                         stack.enter_context(file_dataset_reader(fname)))
 *                     for fname in fnames]
 */
            { /* enter inner scope */
              __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 271, __pyx_L16_error)
              __Pyx_GOTREF(__pyx_t_5);

              /* "pytact/data_reader.pyx":273
 *             dataset = [(fname.relative_to(mountpoint),
 *                         stack.enter_context(file_dataset_reader(fname)))
 *                     for fname in fnames]             # <<<<<<<<<<<<<<
 *             # CAREFUL: LowlevelDataReader contains critical C++ structures that are not being
 *             # tracked by the garbage collector. As soon as this object gets destroyed, those
 */
              __pyx_t_1 = __pyx_cur_scope->__pyx_v_fnames; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
              for (;;) {
                if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 273, __pyx_L16_error)
                #else
                __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_2);
                #endif
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_8genexpr6__pyx_v_fname);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_8genexpr6__pyx_v_fname, __pyx_t_2);
                __Pyx_GIVEREF(__pyx_t_2);
                __pyx_t_2 = 0;

                /* "pytact/data_reader.pyx":271
 *     try:
 *         with ExitStack() as stack:
 *             dataset = [(fname.relative_to(mountpoint),             # <<<<<<<<<<<<<<
 *                         stack.enter_context(file_dataset_reader(fname)))
 *                     for fname in fnames]
 */
                __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_8genexpr6__pyx_v_fname, __pyx_n_s_relative_to); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_8 = NULL;
                __pyx_t_4 = 0;
                if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
                  __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
                  if (likely(__pyx_t_8)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
                    __Pyx_INCREF(__pyx_t_8);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_3, function);
                    __pyx_t_4 = 1;
                  }
                }
                {
                  PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_cur_scope->__pyx_v_mountpoint};
                  __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
                  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
                  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L16_error)
                  __Pyx_GOTREF(__pyx_t_2);
                  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
                }

                /* "pytact/data_reader.pyx":272
 *         with ExitStack() as stack:
 *             dataset = [(fname.relative_to(mountpoint),
 *                         stack.enter_context(file_dataset_reader(fname)))             # <<<<<<<<<<<<<<
 *                     for fname in fnames]
 *             # CAREFUL: LowlevelDataReader contains critical C++ structures that are not being
 */
                __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_stack, __pyx_n_s_enter_context); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 272, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_file_dataset_reader); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 272, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_16);
                __pyx_t_17 = NULL;
                __pyx_t_4 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
                  __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_16);
                  if (likely(__pyx_t_17)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
                    __Pyx_INCREF(__pyx_t_17);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_16, function);
                    __pyx_t_4 = 1;
                  }
                }
                {
                  PyObject *__pyx_callargs[2] = {__pyx_t_17, __pyx_cur_scope->__pyx_8genexpr6__pyx_v_fname};
                  __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
                  __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
                  if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 272, __pyx_L16_error)
                  __Pyx_GOTREF(__pyx_t_15);
                  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
                }
                __pyx_t_16 = NULL;
                __pyx_t_4 = 0;
                if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
                  __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_8);
                  if (likely(__pyx_t_16)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
                    __Pyx_INCREF(__pyx_t_16);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_8, function);
                    __pyx_t_4 = 1;
                  }
                }
                {
                  PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_t_15};
                  __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
                  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
                  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
                  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 272, __pyx_L16_error)
                  __Pyx_GOTREF(__pyx_t_3);
                  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                }

                /* "pytact/data_reader.pyx":271
 *     try:
 *         with ExitStack() as stack:
 *             dataset = [(fname.relative_to(mountpoint),             # <<<<<<<<<<<<<<
 *                         stack.enter_context(file_dataset_reader(fname)))
 *                     for fname in fnames]
 */
                __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 271, __pyx_L16_error)
                __Pyx_GOTREF(__pyx_t_8);
                __Pyx_GIVEREF(__pyx_t_2);
                PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
                __Pyx_GIVEREF(__pyx_t_3);
                PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_3);
                __pyx_t_2 = 0;
                __pyx_t_3 = 0;
                if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 271, __pyx_L16_error)
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

                /* "pytact/data_reader.pyx":273
 *             dataset = [(fname.relative_to(mountpoint),
 *                         stack.enter_context(file_dataset_reader(fname)))
 *                     for fname in fnames]             # <<<<<<<<<<<<<<
 *             # CAREFUL: LowlevelDataReader contains critical C++ structures that are not being
 *             # tracked by the garbage collector. As soon as this object gets destroyed, those
 */
              }
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            } /* exit inner scope */
            __Pyx_GIVEREF(__pyx_t_5);
            __pyx_cur_scope->__pyx_v_dataset = ((PyObject*)__pyx_t_5);
            __pyx_t_5 = 0;

            /* "pytact/data_reader.pyx":281
 *             # If the Python runtime ever becomes clever and eliminates this variable, a different
 *             # method of keeping the object around should be found.
 *             dr = LowlevelDataReader(mountpoint, dataset)             # <<<<<<<<<<<<<<
 *             yield dr
 *     finally:
 */
            __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 281, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_mountpoint);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_mountpoint);
            PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_mountpoint);
            __Pyx_INCREF(__pyx_cur_scope->__pyx_v_dataset);
            __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_dataset);
            PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_cur_scope->__pyx_v_dataset);
            __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_6pytact_11data_reader_LowlevelDataReader), __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L16_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_GIVEREF(__pyx_t_1);
            __pyx_cur_scope->__pyx_v_dr = ((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)__pyx_t_1);
            __pyx_t_1 = 0;

            /* "pytact/data_reader.pyx":282
 *             # method of keeping the object around should be found.
 *             dr = LowlevelDataReader(mountpoint, dataset)
 *             yield dr             # <<<<<<<<<<<<<<
 *     finally:
 *         # Reset open file limit to original
 */
            __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_dr);
            __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_dr);
            __Pyx_XGIVEREF(__pyx_t_11);
            __pyx_cur_scope->__pyx_t_0 = __pyx_t_11;
            __Pyx_XGIVEREF(__pyx_t_12);
            __pyx_cur_scope->__pyx_t_1 = __pyx_t_12;
            __Pyx_XGIVEREF(__pyx_t_13);
            __pyx_cur_scope->__pyx_t_2 = __pyx_t_13;
            __Pyx_XGIVEREF(__pyx_t_14);
            __pyx_cur_scope->__pyx_t_3 = __pyx_t_14;
            __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_L24_resume_from_yield:;
            __pyx_t_11 = __pyx_cur_scope->__pyx_t_0;
            __pyx_cur_scope->__pyx_t_0 = 0;
            __Pyx_XGOTREF(__pyx_t_11);
            __pyx_t_12 = __pyx_cur_scope->__pyx_t_1;
            __pyx_cur_scope->__pyx_t_1 = 0;
            __Pyx_XGOTREF(__pyx_t_12);
            __pyx_t_13 = __pyx_cur_scope->__pyx_t_2;
            __pyx_cur_scope->__pyx_t_2 = 0;
            __Pyx_XGOTREF(__pyx_t_13);
            __pyx_t_14 = __pyx_cur_scope->__pyx_t_3;
            __pyx_cur_scope->__pyx_t_3 = 0;
            __Pyx_XGOTREF(__pyx_t_14);
            if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 282, __pyx_L16_error)

            /* "pytact/data_reader.pyx":270
 * 
 *     try:
 *         with ExitStack() as stack:             # <<<<<<<<<<<<<<
 *             dataset = [(fname.relative_to(mountpoint),
 *                         stack.enter_context(file_dataset_reader(fname)))
 */
          }
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L21_try_end;
          __pyx_L16_error:;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          /*except:*/ {
            __Pyx_AddTraceback("pytact.data_reader.lowlevel_data_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_8) < 0) __PYX_ERR(0, 270, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_3 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_18 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_3, NULL);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 270, __pyx_L18_except_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            if (__pyx_t_9 < 0) __PYX_ERR(0, 270, __pyx_L18_except_error)
            __pyx_t_19 = (!__pyx_t_9);
            if (unlikely(__pyx_t_19)) {
              __Pyx_GIVEREF(__pyx_t_1);
              __Pyx_GIVEREF(__pyx_t_5);
              __Pyx_XGIVEREF(__pyx_t_8);
              __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_5, __pyx_t_8);
              __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_8 = 0; 
              __PYX_ERR(0, 270, __pyx_L18_except_error)
            }
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            goto __pyx_L17_exception_handled;
          }
          __pyx_L18_except_error:;
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          goto __pyx_L10_error;
          __pyx_L17_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          __pyx_L21_try_end:;
        }
      }
      /*finally:*/ {
        /*normal exit:*/{
          if (__pyx_t_11) {
            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__2, NULL);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 270, __pyx_L10_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          }
          goto __pyx_L15;
        }
        __pyx_L15:;
      }
      goto __pyx_L28;
      __pyx_L12_error:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L10_error;
      __pyx_L28:;
    }
  }

  /* "pytact/data_reader.pyx":285
 *     finally:
 *         # Reset open file limit to original
 *         resource.setrlimit(resource.RLIMIT_NOFILE, (soft, hard))             # <<<<<<<<<<<<<<
 * 
 * ProofStateId = int
 */
  /*finally:*/ {
    /*normal exit:*/{
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_resource); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_setrlimit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_resource); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_RLIMIT_NOFILE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_soft);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_soft);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_cur_scope->__pyx_v_soft);
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_hard);
      __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_hard);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_cur_scope->__pyx_v_hard);
      __pyx_t_2 = NULL;
      __pyx_t_4 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_4 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_5};
        __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 285, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L11;
    }
    __pyx_L10_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_18 = 0; __pyx_t_22 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_18, &__pyx_t_22);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_14, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_14, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_22);
      __pyx_t_4 = __pyx_lineno; __pyx_t_20 = __pyx_clineno; __pyx_t_21 = __pyx_filename;
      {
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_resource); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setrlimit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_resource); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_RLIMIT_NOFILE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 285, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L30_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_soft);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_soft);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_soft);
        __Pyx_INCREF(__pyx_cur_scope->__pyx_v_hard);
        __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_hard);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_cur_scope->__pyx_v_hard);
        __pyx_t_2 = NULL;
        __pyx_t_23 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
            __pyx_t_23 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_3, __pyx_t_1};
          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_23, 2+__pyx_t_23);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 285, __pyx_L30_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_22);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_18, __pyx_t_22);
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_14, __pyx_t_13);
      __pyx_t_11 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_18 = 0; __pyx_t_22 = 0;
      __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_20; __pyx_filename = __pyx_t_21;
      goto __pyx_L1_error;
      __pyx_L30_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_22);
        __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_18, __pyx_t_22);
      }
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_12 = 0; __pyx_t_18 = 0; __pyx_t_22 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L11:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":248
 *         return dataset_path
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def lowlevel_data_reader(dataset_path: Path) -> Generator[LowlevelDataReader, None, None]:
 *     """Map a directory of dataset files into memory, and expose their raw Cap'n Proto structures.
 */

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("lowlevel_data_reader", __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;
}

/* "pytact/data_reader.pyx":310
 * 
 *     @staticmethod
 *     cdef init(GraphId graph, int nodeid, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef Node wrapper = Node.__new__(Node)
 *         wrapper.graph_index = graph_index
 */

static PyObject *__pyx_f_6pytact_11data_reader_4Node_init(__pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, int __pyx_v_nodeid, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index) {
  struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Graph::Node::Reader __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":311
 *     @staticmethod
 *     cdef init(GraphId graph, int nodeid, GraphIndex *graph_index):
 *         cdef Node wrapper = Node.__new__(Node)             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Node(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Node), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":312
 *     cdef init(GraphId graph, int nodeid, GraphIndex *graph_index):
 *         cdef Node wrapper = Node.__new__(Node)
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         wrapper.nodeid = nodeid
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":313
 *         cdef Node wrapper = Node.__new__(Node)
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         wrapper.nodeid = nodeid
 *         wrapper.node = graph_index.nodes[graph][nodeid]
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":314
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         wrapper.nodeid = nodeid             # <<<<<<<<<<<<<<
 *         wrapper.node = graph_index.nodes[graph][nodeid]
 *         return wrapper
 */
  __pyx_v_wrapper->nodeid = __pyx_v_nodeid;

  /* "pytact/data_reader.pyx":315
 *         wrapper.graph = graph
 *         wrapper.nodeid = nodeid
 *         wrapper.node = graph_index.nodes[graph][nodeid]             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  try {
    __pyx_t_2 = (__pyx_v_graph_index->nodes[__pyx_v_graph])[__pyx_v_nodeid];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 315, __pyx_L1_error)
  }
  __pyx_v_wrapper->node = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_2);

  /* "pytact/data_reader.pyx":316
 *         wrapper.nodeid = nodeid
 *         wrapper.node = graph_index.nodes[graph][nodeid]
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":310
 * 
 *     @staticmethod
 *     cdef init(GraphId graph, int nodeid, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef Node wrapper = Node.__new__(Node)
 *         wrapper.graph_index = graph_index
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Node.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":318
 *         return wrapper
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return f"node-{self.graph}-{self.nodeid}"
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_1__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_1__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node___repr__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node___repr__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pytact/data_reader.pyx":319
 * 
 *     def __repr__(self):
 *         return f"node-{self.graph}-{self.nodeid}"             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other: Node) -> bool:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u_node);
  __pyx_t_2 += 5;
  __Pyx_GIVEREF(__pyx_kp_u_node);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_node);
  __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_self->graph); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u__10);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__10);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u__10);
  __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_self->nodeid); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_5, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 4, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":318
 *         return wrapper
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return f"node-{self.graph}-{self.nodeid}"
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.Node.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":321
 *         return f"node-{self.graph}-{self.nodeid}"
 * 
 *     def __eq__(self, other: Node) -> bool:             # <<<<<<<<<<<<<<
 *         """Physical equality of two nodes. Note that two nodes with a different physical equality
 *         may have the same `identity`. See `identity` for details.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_4Node_2__eq__, "Physical equality of two nodes. Note that two nodes with a different physical equality\n        may have the same `identity`. See `identity` for details.\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_6pytact_11data_reader_4Node_2__eq__;
#endif
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_6pytact_11data_reader_Node, 0, "other", 0))) __PYX_ERR(0, 321, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_2__eq__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self), ((struct __pyx_obj_6pytact_11data_reader_Node *)__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_6pytact_11data_reader_4Node_2__eq__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pytact/data_reader.pyx":325
 *         may have the same `identity`. See `identity` for details.
 *         """
 *         if isinstance(other, Node):             # <<<<<<<<<<<<<<
 *             return self.graph == other.graph and self.nodeid == other.nodeid
 *         return False
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_other), __pyx_ptype_6pytact_11data_reader_Node); 
  if (__pyx_t_1) {

    /* "pytact/data_reader.pyx":326
 *         """
 *         if isinstance(other, Node):
 *             return self.graph == other.graph and self.nodeid == other.nodeid             # <<<<<<<<<<<<<<
 *         return False
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = (__pyx_v_self->graph == __pyx_v_other->graph);
    if (__pyx_t_1) {
    } else {
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_1 = (__pyx_v_self->nodeid == __pyx_v_other->nodeid);
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_L4_bool_binop_done:;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":325
 *         may have the same `identity`. See `identity` for details.
 *         """
 *         if isinstance(other, Node):             # <<<<<<<<<<<<<<
 *             return self.graph == other.graph and self.nodeid == other.nodeid
 *         return False
 */
  }

  /* "pytact/data_reader.pyx":327
 *         if isinstance(other, Node):
 *             return self.graph == other.graph and self.nodeid == other.nodeid
 *         return False             # <<<<<<<<<<<<<<
 * 
 *     def __hash__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_False);
  __pyx_r = Py_False;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":321
 *         return f"node-{self.graph}-{self.nodeid}"
 * 
 *     def __eq__(self, other: Node) -> bool:             # <<<<<<<<<<<<<<
 *         """Physical equality of two nodes. Note that two nodes with a different physical equality
 *         may have the same `identity`. See `identity` for details.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.Node.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":329
 *         return False
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         """A hash that is corresponds to physical equality, not to be confused by `identity`."""
 *         return (<uint64_t> self.graph) << 32 | self.nodeid
 */

/* Python wrapper */
static Py_hash_t __pyx_pw_6pytact_11data_reader_4Node_5__hash__(PyObject *__pyx_v_self); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_4Node_4__hash__, "A hash that is corresponds to physical equality, not to be confused by `identity`.");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_6pytact_11data_reader_4Node_4__hash__;
#endif
static Py_hash_t __pyx_pw_6pytact_11data_reader_4Node_5__hash__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_4__hash__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static Py_hash_t __pyx_pf_6pytact_11data_reader_4Node_4__hash__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__", 0);

  /* "pytact/data_reader.pyx":331
 *     def __hash__(self):
 *         """A hash that is corresponds to physical equality, not to be confused by `identity`."""
 *         return (<uint64_t> self.graph) << 32 | self.nodeid             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_r = ((((uint64_t)__pyx_v_self->graph) << 32) | __pyx_v_self->nodeid);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":329
 *         return False
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         """A hash that is corresponds to physical equality, not to be confused by `identity`."""
 *         return (<uint64_t> self.graph) << 32 | self.nodeid
 */

  /* function exit code */
  __pyx_L0:;
  if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":333
 *         return (<uint64_t> self.graph) << 32 | self.nodeid
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def label(self) -> Any:
 *         """The label of the node, indicating it's function in the CIC graph."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_5label_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_5label_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_5label___get__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_5label___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Graph::Node::Label::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":336
 *     def label(self) -> Any:
 *         """The label of the node, indicating it's function in the CIC graph."""
 *         return Graph_Node_Label_Reader.init(self.node.getLabel(), None)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->node.getLabel();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 336, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader->init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":333
 *         return (<uint64_t> self.graph) << 32 | self.nodeid
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def label(self) -> Any:
 *         """The label of the node, indicating it's function in the CIC graph."""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Node.label.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":338
 *         return Graph_Node_Label_Reader.init(self.node.getLabel(), None)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def identity(self) -> NodeHash:
 *         """The identity of a node uniquely determines it. That is, one can consider any to nodes with the same
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_8identity_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_8identity_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_8identity___get__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_8identity___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int64_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":366
 *         for machine learning purposes.)
 *         """
 *         return self.node.getIdentity()             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->node.getIdentity();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 366, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyInt_From_int64_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":338
 *         return Graph_Node_Label_Reader.init(self.node.getLabel(), None)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def identity(self) -> NodeHash:
 *         """The identity of a node uniquely determines it. That is, one can consider any to nodes with the same
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Node.identity.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":368
 *         return self.node.getIdentity()
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def children(self) -> Sequence[tuple[int, Node]]:
 *         """The children of a node, together with the labels of the edges towards the children.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_8children_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_8children_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_8children___get__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_8children___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  Graph::Node::Reader __pyx_v_node;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Graph::Node::Reader __pyx_t_1;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_2;
  __pyx_t_6pytact_11data_reader_GraphId __pyx_t_3;
  uint32_t __pyx_t_4;
  uint16_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":373
 *         Note that for efficiency purposes, the label is represented as an integer. The corresponding
 *         enum of this integer is `graph_api_capnp.EdgeClassification`."""
 *         node = self.node             # <<<<<<<<<<<<<<
 *         graph_index = self.graph_index
 *         graph = self.graph
 */
  __pyx_t_1 = __pyx_v_self->node;
  __pyx_v_node = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":374
 *         enum of this integer is `graph_api_capnp.EdgeClassification`."""
 *         node = self.node
 *         graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         graph = self.graph
 *         return EdgeTarget_List.init(
 */
  __pyx_t_2 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_2;

  /* "pytact/data_reader.pyx":375
 *         node = self.node
 *         graph_index = self.graph_index
 *         graph = self.graph             # <<<<<<<<<<<<<<
 *         return EdgeTarget_List.init(
 *             graph_index.edges[graph], graph_index, graph,
 */
  __pyx_t_3 = __pyx_v_self->graph;
  __pyx_v_graph = __pyx_t_3;

  /* "pytact/data_reader.pyx":376
 *         graph_index = self.graph_index
 *         graph = self.graph
 *         return EdgeTarget_List.init(             # <<<<<<<<<<<<<<
 *             graph_index.edges[graph], graph_index, graph,
 *             node.getChildrenIndex(), node.getChildrenCount())
 */
  __Pyx_XDECREF(__pyx_r);

  /* "pytact/data_reader.pyx":378
 *         return EdgeTarget_List.init(
 *             graph_index.edges[graph], graph_index, graph,
 *             node.getChildrenIndex(), node.getChildrenCount())             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  try {
    __pyx_t_4 = __pyx_v_node.getChildrenIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 378, __pyx_L1_error)
  }
  try {
    __pyx_t_5 = __pyx_v_node.getChildrenCount();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 378, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":376
 *         graph_index = self.graph_index
 *         graph = self.graph
 *         return EdgeTarget_List.init(             # <<<<<<<<<<<<<<
 *             graph_index.edges[graph], graph_index, graph,
 *             node.getChildrenIndex(), node.getChildrenCount())
 */
  __pyx_t_6 = __pyx_f_6pytact_11data_reader_15EdgeTarget_List_init((__pyx_v_graph_index->edges[__pyx_v_graph]), __pyx_v_graph_index, __pyx_v_graph, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":368
 *         return self.node.getIdentity()
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def children(self) -> Sequence[tuple[int, Node]]:
 *         """The children of a node, together with the labels of the edges towards the children.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pytact.data_reader.Node.children.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":380
 *             node.getChildrenIndex(), node.getChildrenCount())
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def definition(self) -> Definition | None:
 *         """Some nodes in the CIC graph represent definitions. Such nodes contain extra information about the
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_10definition_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_10definition_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_10definition___get__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_10definition___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  Graph::Node::Label::Reader __pyx_v_label;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Graph::Node::Label::Reader __pyx_t_1;
  bool __pyx_t_2;
  int __pyx_t_3;
  Definition::Reader __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":385
 *         definition.
 *         """
 *         label = self.node.getLabel()             # <<<<<<<<<<<<<<
 *         if label.isDefinition():
 *             return Definition.init(self, label.getDefinition(), self.graph, self.graph_index)
 */
  try {
    __pyx_t_1 = __pyx_v_self->node.getLabel();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 385, __pyx_L1_error)
  }
  __pyx_v_label = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":386
 *         """
 *         label = self.node.getLabel()
 *         if label.isDefinition():             # <<<<<<<<<<<<<<
 *             return Definition.init(self, label.getDefinition(), self.graph, self.graph_index)
 *         else:
 */
  try {
    __pyx_t_2 = __pyx_v_label.isDefinition();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 386, __pyx_L1_error)
  }
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":387
 *         label = self.node.getLabel()
 *         if label.isDefinition():
 *             return Definition.init(self, label.getDefinition(), self.graph, self.graph_index)             # <<<<<<<<<<<<<<
 *         else:
 *             return None
 */
    __Pyx_XDECREF(__pyx_r);
    try {
      __pyx_t_4 = __pyx_v_label.getDefinition();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 387, __pyx_L1_error)
    }
    __pyx_t_5 = __pyx_f_6pytact_11data_reader_10Definition_init(__pyx_v_self, __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4), __pyx_v_self->graph, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 387, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":386
 *         """
 *         label = self.node.getLabel()
 *         if label.isDefinition():             # <<<<<<<<<<<<<<
 *             return Definition.init(self, label.getDefinition(), self.graph, self.graph_index)
 *         else:
 */
  }

  /* "pytact/data_reader.pyx":389
 *             return Definition.init(self, label.getDefinition(), self.graph, self.graph_index)
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 * cdef class EdgeTarget_List:
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":380
 *             node.getChildrenIndex(), node.getChildrenCount())
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def definition(self) -> Definition | None:
 *         """Some nodes in the CIC graph represent definitions. Such nodes contain extra information about the
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.Node.definition.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":303
 *     cdef C_Graph_Node_Reader node
 * 
 *     cdef readonly GraphId graph             # <<<<<<<<<<<<<<
 *     """The id of the graph in which this node occurs. For lowlevel use only."""
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_5graph_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_5graph_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_5graph___get__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_5graph___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_self->graph); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Node.graph.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":306
 *     """The id of the graph in which this node occurs. For lowlevel use only."""
 * 
 *     cdef readonly NodeId nodeid             # <<<<<<<<<<<<<<
 *     """The local id of the node in the dataset. For lowlevel use only."""
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_6nodeid_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_6nodeid_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_6nodeid___get__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_6nodeid___get__(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_self->nodeid); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Node.nodeid.__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.graph_index,self.node cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_4Node_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_4Node_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_6__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_node_canno, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Node.__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.graph_index,self.node cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_4Node_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_4Node_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_4Node_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Node.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_4Node_8__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_4Node_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_node_canno, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Node.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":399
 * 
 *     @staticmethod
 *     cdef init(C_Graph_EdgeTarget_Reader_List edges, GraphIndex *graph_index,             # <<<<<<<<<<<<<<
 *               GraphId graph, uint32_t start, uint16_t count):
 *         cdef EdgeTarget_List wrapper = EdgeTarget_List.__new__(EdgeTarget_List)
 */

static PyObject *__pyx_f_6pytact_11data_reader_15EdgeTarget_List_init( ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader __pyx_v_edges, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, uint32_t __pyx_v_start, uint16_t __pyx_v_count) {
  struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":401
 *     cdef init(C_Graph_EdgeTarget_Reader_List edges, GraphIndex *graph_index,
 *               GraphId graph, uint32_t start, uint16_t count):
 *         cdef EdgeTarget_List wrapper = EdgeTarget_List.__new__(EdgeTarget_List)             # <<<<<<<<<<<<<<
 *         wrapper.edges = edges
 *         wrapper.graph_index = graph_index
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_EdgeTarget_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_EdgeTarget_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 401, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":402
 *               GraphId graph, uint32_t start, uint16_t count):
 *         cdef EdgeTarget_List wrapper = EdgeTarget_List.__new__(EdgeTarget_List)
 *         wrapper.edges = edges             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->edges = __pyx_v_edges;

  /* "pytact/data_reader.pyx":403
 *         cdef EdgeTarget_List wrapper = EdgeTarget_List.__new__(EdgeTarget_List)
 *         wrapper.edges = edges
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         wrapper.start = start
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":404
 *         wrapper.edges = edges
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         wrapper.start = start
 *         wrapper.count = count
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":405
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         wrapper.start = start             # <<<<<<<<<<<<<<
 *         wrapper.count = count
 *         return wrapper
 */
  __pyx_v_wrapper->start = __pyx_v_start;

  /* "pytact/data_reader.pyx":406
 *         wrapper.graph = graph
 *         wrapper.start = start
 *         wrapper.count = count             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->count = __pyx_v_count;

  /* "pytact/data_reader.pyx":407
 *         wrapper.start = start
 *         wrapper.count = count
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> tuple[int, Node]:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":399
 * 
 *     @staticmethod
 *     cdef init(C_Graph_EdgeTarget_Reader_List edges, GraphIndex *graph_index,             # <<<<<<<<<<<<<<
 *               GraphId graph, uint32_t start, uint16_t count):
 *         cdef EdgeTarget_List wrapper = EdgeTarget_List.__new__(EdgeTarget_List)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.EdgeTarget_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":409
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> tuple[int, Node]:             # <<<<<<<<<<<<<<
 *         if index >= self.count:
 *             raise IndexError('Out of bounds')
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 409, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.EdgeTarget_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_15EdgeTarget_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_15EdgeTarget_List___getitem__(struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
  Graph::EdgeTarget::Reader __pyx_v_edge;
  Graph::EdgeTarget::Target::Reader __pyx_v_target;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Graph::EdgeTarget::Reader __pyx_t_3;
  Graph::EdgeTarget::Target::Reader __pyx_t_4;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_5;
  __PYX_ENUM_CLASS_DECL capnp::schemas::EdgeClassification_e40ecefe7a595f8e __pyx_t_6;
  uint16_t __pyx_t_7;
  uint32_t __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":410
 * 
 *     def __getitem__(self, uint index) -> tuple[int, Node]:
 *         if index >= self.count:             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         cdef C_Graph_EdgeTarget_Reader edge = self.edges[self.start+index]
 */
  __pyx_t_1 = (__pyx_v_index >= __pyx_v_self->count);
  if (unlikely(__pyx_t_1)) {

    /* "pytact/data_reader.pyx":411
 *     def __getitem__(self, uint index) -> tuple[int, Node]:
 *         if index >= self.count:
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         cdef C_Graph_EdgeTarget_Reader edge = self.edges[self.start+index]
 *         cdef C_Graph_EdgeTarget_Target_Reader target = edge.getTarget()
 */
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __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, 411, __pyx_L1_error)

    /* "pytact/data_reader.pyx":410
 * 
 *     def __getitem__(self, uint index) -> tuple[int, Node]:
 *         if index >= self.count:             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         cdef C_Graph_EdgeTarget_Reader edge = self.edges[self.start+index]
 */
  }

  /* "pytact/data_reader.pyx":412
 *         if index >= self.count:
 *             raise IndexError('Out of bounds')
 *         cdef C_Graph_EdgeTarget_Reader edge = self.edges[self.start+index]             # <<<<<<<<<<<<<<
 *         cdef C_Graph_EdgeTarget_Target_Reader target = edge.getTarget()
 *         cdef GraphIndex *graph_index = self.graph_index
 */
  try {
    __pyx_t_3 = __pyx_v_self->edges[(__pyx_v_self->start + __pyx_v_index)];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 412, __pyx_L1_error)
  }
  __pyx_v_edge = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_3);

  /* "pytact/data_reader.pyx":413
 *             raise IndexError('Out of bounds')
 *         cdef C_Graph_EdgeTarget_Reader edge = self.edges[self.start+index]
 *         cdef C_Graph_EdgeTarget_Target_Reader target = edge.getTarget()             # <<<<<<<<<<<<<<
 *         cdef GraphIndex *graph_index = self.graph_index
 *         return (edge.getLabel(),
 */
  try {
    __pyx_t_4 = __pyx_v_edge.getTarget();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 413, __pyx_L1_error)
  }
  __pyx_v_target = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4);

  /* "pytact/data_reader.pyx":414
 *         cdef C_Graph_EdgeTarget_Reader edge = self.edges[self.start+index]
 *         cdef C_Graph_EdgeTarget_Target_Reader target = edge.getTarget()
 *         cdef GraphIndex *graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         return (edge.getLabel(),
 *                 Node.init(graph_index.local_to_global[self.graph][target.getDepIndex()],
 */
  __pyx_t_5 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_5;

  /* "pytact/data_reader.pyx":415
 *         cdef C_Graph_EdgeTarget_Target_Reader target = edge.getTarget()
 *         cdef GraphIndex *graph_index = self.graph_index
 *         return (edge.getLabel(),             # <<<<<<<<<<<<<<
 *                 Node.init(graph_index.local_to_global[self.graph][target.getDepIndex()],
 *                           target.getNodeIndex(), graph_index))
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_6 = __pyx_v_edge.getLabel();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 415, __pyx_L1_error)
  }
  __pyx_t_2 = [](const capnp::schemas::EdgeClassification_e40ecefe7a595f8e& x){return __Pyx_PyInt_From_uint16_t((uint16_t)x);}(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":416
 *         cdef GraphIndex *graph_index = self.graph_index
 *         return (edge.getLabel(),
 *                 Node.init(graph_index.local_to_global[self.graph][target.getDepIndex()],             # <<<<<<<<<<<<<<
 *                           target.getNodeIndex(), graph_index))
 * 
 */
  try {
    __pyx_t_7 = __pyx_v_target.getDepIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 416, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":417
 *         return (edge.getLabel(),
 *                 Node.init(graph_index.local_to_global[self.graph][target.getDepIndex()],
 *                           target.getNodeIndex(), graph_index))             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  try {
    __pyx_t_8 = __pyx_v_target.getNodeIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 417, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":416
 *         cdef GraphIndex *graph_index = self.graph_index
 *         return (edge.getLabel(),
 *                 Node.init(graph_index.local_to_global[self.graph][target.getDepIndex()],             # <<<<<<<<<<<<<<
 *                           target.getNodeIndex(), graph_index))
 * 
 */
  __pyx_t_9 = __pyx_f_6pytact_11data_reader_4Node_init(((__pyx_v_graph_index->local_to_global[__pyx_v_self->graph])[__pyx_t_7]), __pyx_t_8, __pyx_v_graph_index); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);

  /* "pytact/data_reader.pyx":415
 *         cdef C_Graph_EdgeTarget_Target_Reader target = edge.getTarget()
 *         cdef GraphIndex *graph_index = self.graph_index
 *         return (edge.getLabel(),             # <<<<<<<<<<<<<<
 *                 Node.init(graph_index.local_to_global[self.graph][target.getDepIndex()],
 *                           target.getNodeIndex(), graph_index))
 */
  __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_9);
  __pyx_t_2 = 0;
  __pyx_t_9 = 0;
  __pyx_r = __pyx_t_10;
  __pyx_t_10 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":409
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> tuple[int, Node]:             # <<<<<<<<<<<<<<
 *         if index >= self.count:
 *             raise IndexError('Out of bounds')
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pytact.data_reader.EdgeTarget_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":419
 *                           target.getNodeIndex(), graph_index))
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.count
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_15EdgeTarget_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_15EdgeTarget_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_15EdgeTarget_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":420
 * 
 *     def __len__(self):
 *         return self.count             # <<<<<<<<<<<<<<
 * 
 * cdef class Node_List:
 */
  __pyx_r = __pyx_v_self->count;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":419
 *                           target.getNodeIndex(), graph_index))
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.count
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_15EdgeTarget_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_15EdgeTarget_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_15EdgeTarget_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_edges_self_graph_index_cann, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.EdgeTarget_List.__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.edges,self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_15EdgeTarget_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.EdgeTarget_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_15EdgeTarget_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_15EdgeTarget_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_edges_self_graph_index_cann, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.EdgeTarget_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":428
 * 
 *     @staticmethod
 *     cdef init(C_Node_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Node_List wrapper = Node_List.__new__(Node_List)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_9Node_List_init( ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph) {
  struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":429
 *     @staticmethod
 *     cdef init(C_Node_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Node_List wrapper = Node_List.__new__(Node_List)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Node_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Node_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Node_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":430
 *     cdef init(C_Node_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Node_List wrapper = Node_List.__new__(Node_List)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":431
 *         cdef Node_List wrapper = Node_List.__new__(Node_List)
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         return wrapper
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":432
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":433
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> Node:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":428
 * 
 *     @staticmethod
 *     cdef init(C_Node_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Node_List wrapper = Node_List.__new__(Node_List)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Node_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":435
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Node:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9Node_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_9Node_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 435, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Node_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_9Node_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_Node_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_9Node_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
   ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader;
  Node::Reader __pyx_v_node;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Node::Reader __pyx_t_4;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_5;
  uint16_t __pyx_t_6;
  uint32_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":436
 * 
 *     def __getitem__(self, uint index) -> Node:
 *         reader = self.reader             # <<<<<<<<<<<<<<
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":437
 *     def __getitem__(self, uint index) -> Node:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         node = reader[index]
 */
  __pyx_t_2 = (__pyx_v_index >= __pyx_v_reader.size());
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":438
 *         reader = self.reader
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         node = reader[index]
 *         graph_index = self.graph_index
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 438, __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, 438, __pyx_L1_error)

    /* "pytact/data_reader.pyx":437
 *     def __getitem__(self, uint index) -> Node:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         node = reader[index]
 */
  }

  /* "pytact/data_reader.pyx":439
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 *         node = reader[index]             # <<<<<<<<<<<<<<
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][node.getDepIndex()],
 */
  try {
    __pyx_t_4 = __pyx_v_reader[__pyx_v_index];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 439, __pyx_L1_error)
  }
  __pyx_v_node = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4);

  /* "pytact/data_reader.pyx":440
 *             raise IndexError('Out of bounds')
 *         node = reader[index]
 *         graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         return Node.init(graph_index.local_to_global[self.graph][node.getDepIndex()],
 *                          node.getNodeIndex(), graph_index)
 */
  __pyx_t_5 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_5;

  /* "pytact/data_reader.pyx":441
 *         node = reader[index]
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][node.getDepIndex()],             # <<<<<<<<<<<<<<
 *                          node.getNodeIndex(), graph_index)
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_6 = __pyx_v_node.getDepIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 441, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":442
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][node.getDepIndex()],
 *                          node.getNodeIndex(), graph_index)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  try {
    __pyx_t_7 = __pyx_v_node.getNodeIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 442, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":441
 *         node = reader[index]
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][node.getDepIndex()],             # <<<<<<<<<<<<<<
 *                          node.getNodeIndex(), graph_index)
 * 
 */
  __pyx_t_3 = __pyx_f_6pytact_11data_reader_4Node_init(((__pyx_v_graph_index->local_to_global[__pyx_v_self->graph])[__pyx_t_6]), __pyx_t_7, __pyx_v_graph_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":435
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Node:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.Node_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":444
 *                          node.getNodeIndex(), graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_9Node_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_9Node_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_9Node_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_Node_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":445
 * 
 *     def __len__(self):
 *         return self.reader.size()             # <<<<<<<<<<<<<<
 * 
 * cdef class ProofState:
 */
  __pyx_r = __pyx_v_self->reader.size();
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":444
 *                          node.getNodeIndex(), graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9Node_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9Node_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9Node_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_9Node_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_9Node_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Node_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_9Node_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Node_List.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9Node_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9Node_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9Node_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_9Node_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Node_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_9Node_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Node_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_9Node_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Node_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Node_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":455
 * 
 *     @staticmethod
 *     cdef init(C_ProofState_Reader reader, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef ProofState wrapper = ProofState.__new__(ProofState)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_10ProofState_init(ProofState::Reader __pyx_v_reader, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index) {
  struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":456
 *     @staticmethod
 *     cdef init(C_ProofState_Reader reader, GraphId graph, GraphIndex *graph_index):
 *         cdef ProofState wrapper = ProofState.__new__(ProofState)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph = graph
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_ProofState(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_ProofState), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 456, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":457
 *     cdef init(C_ProofState_Reader reader, GraphId graph, GraphIndex *graph_index):
 *         cdef ProofState wrapper = ProofState.__new__(ProofState)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":458
 *         cdef ProofState wrapper = ProofState.__new__(ProofState)
 *         wrapper.reader = reader
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         return wrapper
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":459
 *         wrapper.reader = reader
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":460
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":455
 * 
 *     @staticmethod
 *     cdef init(C_ProofState_Reader reader, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef ProofState wrapper = ProofState.__new__(ProofState)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":462
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return ProofState_Reader.init(self.reader, None)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_8lowlevel_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_8lowlevel_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_8lowlevel___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":464
 *     @property
 *     def lowlevel(self):
 *         return ProofState_Reader.init(self.reader, None)             # <<<<<<<<<<<<<<
 *     def __repr__(self):
 *         return repr(self.lowlevel)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Reader->init(__pyx_v_self->reader, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":462
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return ProofState_Reader.init(self.reader, None)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.lowlevel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":465
 *     def lowlevel(self):
 *         return ProofState_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_1__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_1__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState___repr__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState___repr__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pytact/data_reader.pyx":466
 *         return ProofState_Reader.init(self.reader, None)
 *     def __repr__(self):
 *         return repr(self.lowlevel)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_lowlevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 466, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __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;

  /* "pytact/data_reader.pyx":465
 *     def lowlevel(self):
 *         return ProofState_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":468
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def root(self) -> Node:
 *         """The entry-point of the proof state, all nodes that are 'part of' the proof state are
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_4root_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_4root_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_4root___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_4root___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  ProofState::Root::Reader __pyx_v_root;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  ProofState::Root::Reader __pyx_t_1;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_2;
  uint16_t __pyx_t_3;
  uint32_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":472
 *         """The entry-point of the proof state, all nodes that are 'part of' the proof state are
 *         reachable from here."""
 *         root = self.reader.getRoot()             # <<<<<<<<<<<<<<
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][root.getDepIndex()],
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getRoot();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 472, __pyx_L1_error)
  }
  __pyx_v_root = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":473
 *         reachable from here."""
 *         root = self.reader.getRoot()
 *         graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         return Node.init(graph_index.local_to_global[self.graph][root.getDepIndex()],
 *                          root.getNodeIndex(), graph_index)
 */
  __pyx_t_2 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_2;

  /* "pytact/data_reader.pyx":474
 *         root = self.reader.getRoot()
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][root.getDepIndex()],             # <<<<<<<<<<<<<<
 *                          root.getNodeIndex(), graph_index)
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_3 = __pyx_v_root.getDepIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 474, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":475
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][root.getDepIndex()],
 *                          root.getNodeIndex(), graph_index)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  try {
    __pyx_t_4 = __pyx_v_root.getNodeIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 475, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":474
 *         root = self.reader.getRoot()
 *         graph_index = self.graph_index
 *         return Node.init(graph_index.local_to_global[self.graph][root.getDepIndex()],             # <<<<<<<<<<<<<<
 *                          root.getNodeIndex(), graph_index)
 * 
 */
  __pyx_t_5 = __pyx_f_6pytact_11data_reader_4Node_init(((__pyx_v_graph_index->local_to_global[__pyx_v_self->graph])[__pyx_t_3]), __pyx_t_4, __pyx_v_graph_index); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":468
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def root(self) -> Node:
 *         """The entry-point of the proof state, all nodes that are 'part of' the proof state are
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.root.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":477
 *                          root.getNodeIndex(), graph_index)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def context(self) -> Sequence[Node]:
 *         """The local context of the proof state, given as a tuple of their original name as they appeared in the
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_7context_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_7context_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_7context___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_7context___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":489
 *         not be concerned about the names of the context.
 *         """
 *         return Node_List.init(self.reader.getContext(), self.graph_index, self.graph)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getContext();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 489, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_6pytact_11data_reader_9Node_List_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), __pyx_v_self->graph_index, __pyx_v_self->graph); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":477
 *                          root.getNodeIndex(), graph_index)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def context(self) -> Sequence[Node]:
 *         """The local context of the proof state, given as a tuple of their original name as they appeared in the
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.context.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":491
 *         return Node_List.init(self.reader.getContext(), self.graph_index, self.graph)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def context_names(self) -> Sequence[str]:
 *         """The names of the local context nodes of the proof state, as they originally appeared in the proof.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_13context_names_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_13context_names_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_13context_names___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_13context_names___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<capnp::Text, ::capnp::Kind::BLOB>::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":499
 *         the context.
 *         """
 *         return String_List.init(self.reader.getContextNames(), None)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getContextNames();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 499, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_String_List->init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":491
 *         return Node_List.init(self.reader.getContext(), self.graph_index, self.graph)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def context_names(self) -> Sequence[str]:
 *         """The names of the local context nodes of the proof state, as they originally appeared in the proof.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.context_names.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":501
 *         return String_List.init(self.reader.getContextNames(), None)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def context_text(self) -> Sequence[str]:
 *         """A textual representation of the type/definition of context nodes
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_12context_text_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_12context_text_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_12context_text___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_12context_text___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<capnp::Text, ::capnp::Kind::BLOB>::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":505
 *         """A textual representation of the type/definition of context nodes
 *         """
 *         return String_List.init(self.reader.getContextText(), None)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getContextText();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 505, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_String_List->init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":501
 *         return String_List.init(self.reader.getContextNames(), None)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def context_text(self) -> Sequence[str]:
 *         """A textual representation of the type/definition of context nodes
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.context_text.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":507
 *         return String_List.init(self.reader.getContextText(), None)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def conclusion_text(self) -> str:
 *         """A textual representation of the conclusion of the proof state.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_15conclusion_text_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_15conclusion_text_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_15conclusion_text___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_15conclusion_text___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::kj::StringPtr __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":511
 *         """A textual representation of the conclusion of the proof state.
 *         """
 *         temp = self.reader.getConclusionText()             # <<<<<<<<<<<<<<
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getConclusionText();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 511, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":512
 *         """
 *         temp = self.reader.getConclusionText()
 *         return (<char*>temp.begin())[:temp.size()]             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":507
 *         return String_List.init(self.reader.getContextText(), None)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def conclusion_text(self) -> str:
 *         """A textual representation of the conclusion of the proof state.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.conclusion_text.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":514
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def text(self) -> str:
 *         """A textual representation of the proof state."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_4text_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_4text_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_4text___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_4text___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::kj::StringPtr __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":517
 *     def text(self) -> str:
 *         """A textual representation of the proof state."""
 *         temp = self.reader.getText()             # <<<<<<<<<<<<<<
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getText();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 517, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":518
 *         """A textual representation of the proof state."""
 *         temp = self.reader.getText()
 *         return (<char*>temp.begin())[:temp.size()]             # <<<<<<<<<<<<<<
 * 
 *     def __str__(self) -> str:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":514
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def text(self) -> str:
 *         """A textual representation of the proof state."""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.text.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":520
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     def __str__(self) -> str:             # <<<<<<<<<<<<<<
 *         return self.text
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_3__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_3__str__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_2__str__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_2__str__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__str__", 0);

  /* "pytact/data_reader.pyx":521
 * 
 *     def __str__(self) -> str:
 *         return self.text             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":520
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     def __str__(self) -> str:             # <<<<<<<<<<<<<<
 *         return self.text
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":523
 *         return self.text
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def id(self) -> ProofStateId:
 *         """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_2id_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_2id_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_2id___get__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_2id___get__(struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  uint32_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":532
 *                    side-effect by a tactic running on another proof state.
 *         """
 *         return self.reader.getId()             # <<<<<<<<<<<<<<
 * 
 * cdef class ProofState_List:
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getId();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 532, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":523
 *         return self.text
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def id(self) -> ProofStateId:
 *         """
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofState.id.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10ProofState_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10ProofState_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofState.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10ProofState_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10ProofState_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_10ProofState_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofState.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10ProofState_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofState *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_10ProofState_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofState.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":540
 * 
 *     @staticmethod
 *     cdef init(C_ProofState_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef ProofState_List wrapper = ProofState_List.__new__(ProofState_List)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_15ProofState_List_init( ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph) {
  struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":541
 *     @staticmethod
 *     cdef init(C_ProofState_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef ProofState_List wrapper = ProofState_List.__new__(ProofState_List)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_ProofState_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_ProofState_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_ProofState_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":542
 *     cdef init(C_ProofState_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef ProofState_List wrapper = ProofState_List.__new__(ProofState_List)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":543
 *         cdef ProofState_List wrapper = ProofState_List.__new__(ProofState_List)
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         return wrapper
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":544
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":545
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> ProofState:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":540
 * 
 *     @staticmethod
 *     cdef init(C_ProofState_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef ProofState_List wrapper = ProofState_List.__new__(ProofState_List)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.ProofState_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":547
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> ProofState:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_15ProofState_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_15ProofState_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 547, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofState_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_15ProofState_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_ProofState_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_15ProofState_List___getitem__(struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
   ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  ProofState::Reader __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":548
 * 
 *     def __getitem__(self, uint index) -> ProofState:
 *         reader = self.reader             # <<<<<<<<<<<<<<
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":549
 *     def __getitem__(self, uint index) -> ProofState:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return ProofState.init(reader[index], self.graph, self.graph_index)
 */
  __pyx_t_2 = (__pyx_v_index >= __pyx_v_reader.size());
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":550
 *         reader = self.reader
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         return ProofState.init(reader[index], self.graph, self.graph_index)
 * 
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 550, __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, 550, __pyx_L1_error)

    /* "pytact/data_reader.pyx":549
 *     def __getitem__(self, uint index) -> ProofState:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return ProofState.init(reader[index], self.graph, self.graph_index)
 */
  }

  /* "pytact/data_reader.pyx":551
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 *         return ProofState.init(reader[index], self.graph, self.graph_index)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_4 = __pyx_v_reader[__pyx_v_index];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 551, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_f_6pytact_11data_reader_10ProofState_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4), __pyx_v_self->graph, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":547
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> ProofState:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.ProofState_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":553
 *         return ProofState.init(reader[index], self.graph, self.graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_15ProofState_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_15ProofState_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_15ProofState_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_ProofState_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":554
 * 
 *     def __len__(self):
 *         return self.reader.size()             # <<<<<<<<<<<<<<
 * 
 * cdef class Argument_List:
 */
  __pyx_r = __pyx_v_self->reader.size();
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":553
 *         return ProofState.init(reader[index], self.graph, self.graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_15ProofState_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_15ProofState_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15ProofState_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_15ProofState_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_15ProofState_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofState_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_15ProofState_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofState_List.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_15ProofState_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_15ProofState_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15ProofState_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_15ProofState_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofState_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_15ProofState_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofState_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_15ProofState_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofState_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofState_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":562
 * 
 *     @staticmethod
 *     cdef init(C_Argument_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Argument_List wrapper = Argument_List.__new__(Argument_List)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_13Argument_List_init( ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph) {
  struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":563
 *     @staticmethod
 *     cdef init(C_Argument_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Argument_List wrapper = Argument_List.__new__(Argument_List)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Argument_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Argument_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 563, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Argument_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":564
 *     cdef init(C_Argument_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Argument_List wrapper = Argument_List.__new__(Argument_List)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":565
 *         cdef Argument_List wrapper = Argument_List.__new__(Argument_List)
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         return wrapper
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":566
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":567
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> Node | None:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":562
 * 
 *     @staticmethod
 *     cdef init(C_Argument_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Argument_List wrapper = Argument_List.__new__(Argument_List)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Argument_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":569
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Node | None:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_13Argument_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_13Argument_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 569, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Argument_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_13Argument_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_Argument_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_13Argument_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
   ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader;
  Argument::Reader __pyx_v_arg;
  Argument::Term::Reader __pyx_v_term;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Argument::Reader __pyx_t_4;
  bool __pyx_t_5;
  Argument::Term::Reader __pyx_t_6;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_7;
  uint16_t __pyx_t_8;
  uint32_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":570
 * 
 *     def __getitem__(self, uint index) -> Node | None:
 *         reader = self.reader             # <<<<<<<<<<<<<<
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":571
 *     def __getitem__(self, uint index) -> Node | None:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         arg = reader[index]
 */
  __pyx_t_2 = (__pyx_v_index >= __pyx_v_reader.size());
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":572
 *         reader = self.reader
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         arg = reader[index]
 *         if arg.isUnresolvable():
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 572, __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, 572, __pyx_L1_error)

    /* "pytact/data_reader.pyx":571
 *     def __getitem__(self, uint index) -> Node | None:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         arg = reader[index]
 */
  }

  /* "pytact/data_reader.pyx":573
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 *         arg = reader[index]             # <<<<<<<<<<<<<<
 *         if arg.isUnresolvable():
 *             return None
 */
  try {
    __pyx_t_4 = __pyx_v_reader[__pyx_v_index];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 573, __pyx_L1_error)
  }
  __pyx_v_arg = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4);

  /* "pytact/data_reader.pyx":574
 *             raise IndexError('Out of bounds')
 *         arg = reader[index]
 *         if arg.isUnresolvable():             # <<<<<<<<<<<<<<
 *             return None
 *         elif arg.isTerm():
 */
  try {
    __pyx_t_5 = __pyx_v_arg.isUnresolvable();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 574, __pyx_L1_error)
  }
  __pyx_t_2 = (__pyx_t_5 != 0);
  if (__pyx_t_2) {

    /* "pytact/data_reader.pyx":575
 *         arg = reader[index]
 *         if arg.isUnresolvable():
 *             return None             # <<<<<<<<<<<<<<
 *         elif arg.isTerm():
 *             term = arg.getTerm()
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":574
 *             raise IndexError('Out of bounds')
 *         arg = reader[index]
 *         if arg.isUnresolvable():             # <<<<<<<<<<<<<<
 *             return None
 *         elif arg.isTerm():
 */
  }

  /* "pytact/data_reader.pyx":576
 *         if arg.isUnresolvable():
 *             return None
 *         elif arg.isTerm():             # <<<<<<<<<<<<<<
 *             term = arg.getTerm()
 *             graph_index = self.graph_index
 */
  try {
    __pyx_t_5 = __pyx_v_arg.isTerm();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 576, __pyx_L1_error)
  }
  __pyx_t_2 = (__pyx_t_5 != 0);
  if (__pyx_t_2) {

    /* "pytact/data_reader.pyx":577
 *             return None
 *         elif arg.isTerm():
 *             term = arg.getTerm()             # <<<<<<<<<<<<<<
 *             graph_index = self.graph_index
 *             return Node.init(graph_index.local_to_global[self.graph][term.getDepIndex()],
 */
    try {
      __pyx_t_6 = __pyx_v_arg.getTerm();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 577, __pyx_L1_error)
    }
    __pyx_v_term = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_6);

    /* "pytact/data_reader.pyx":578
 *         elif arg.isTerm():
 *             term = arg.getTerm()
 *             graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *             return Node.init(graph_index.local_to_global[self.graph][term.getDepIndex()],
 *                              term.getNodeIndex(), graph_index)
 */
    __pyx_t_7 = __pyx_v_self->graph_index;
    __pyx_v_graph_index = __pyx_t_7;

    /* "pytact/data_reader.pyx":579
 *             term = arg.getTerm()
 *             graph_index = self.graph_index
 *             return Node.init(graph_index.local_to_global[self.graph][term.getDepIndex()],             # <<<<<<<<<<<<<<
 *                              term.getNodeIndex(), graph_index)
 *         else: assert False
 */
    __Pyx_XDECREF(__pyx_r);
    try {
      __pyx_t_8 = __pyx_v_term.getDepIndex();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 579, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":580
 *             graph_index = self.graph_index
 *             return Node.init(graph_index.local_to_global[self.graph][term.getDepIndex()],
 *                              term.getNodeIndex(), graph_index)             # <<<<<<<<<<<<<<
 *         else: assert False
 * 
 */
    try {
      __pyx_t_9 = __pyx_v_term.getNodeIndex();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 580, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":579
 *             term = arg.getTerm()
 *             graph_index = self.graph_index
 *             return Node.init(graph_index.local_to_global[self.graph][term.getDepIndex()],             # <<<<<<<<<<<<<<
 *                              term.getNodeIndex(), graph_index)
 *         else: assert False
 */
    __pyx_t_3 = __pyx_f_6pytact_11data_reader_4Node_init(((__pyx_v_graph_index->local_to_global[__pyx_v_self->graph])[__pyx_t_8]), __pyx_t_9, __pyx_v_graph_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 579, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":576
 *         if arg.isUnresolvable():
 *             return None
 *         elif arg.isTerm():             # <<<<<<<<<<<<<<
 *             term = arg.getTerm()
 *             graph_index = self.graph_index
 */
  }

  /* "pytact/data_reader.pyx":581
 *             return Node.init(graph_index.local_to_global[self.graph][term.getDepIndex()],
 *                              term.getNodeIndex(), graph_index)
 *         else: assert False             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  /*else*/ {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
        __PYX_ERR(0, 581, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(0, 581, __pyx_L1_error)
    #endif
  }

  /* "pytact/data_reader.pyx":569
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Node | None:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.Argument_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":583
 *         else: assert False
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_13Argument_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_13Argument_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_13Argument_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_Argument_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":584
 * 
 *     def __len__(self):
 *         return self.reader.size()             # <<<<<<<<<<<<<<
 * 
 * Unresolvable: TypeAlias = None
 */
  __pyx_r = __pyx_v_self->reader.size();
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":583
 *         else: assert False
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_13Argument_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_13Argument_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_13Argument_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_13Argument_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_13Argument_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Argument_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_13Argument_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Argument_List.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_13Argument_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_13Argument_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_13Argument_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_13Argument_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Argument_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_13Argument_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Argument_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_13Argument_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Argument_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Argument_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":603
 * 
 *     @staticmethod
 *     cdef init(C_Outcome_Reader reader, tactic: Tactic_Reader | Unknown, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef Outcome wrapper = Outcome.__new__(Outcome)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_7Outcome_init(Outcome::Reader __pyx_v_reader, PyObject *__pyx_v_tactic, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index) {
  struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":604
 *     @staticmethod
 *     cdef init(C_Outcome_Reader reader, tactic: Tactic_Reader | Unknown, GraphId graph, GraphIndex *graph_index):
 *         cdef Outcome wrapper = Outcome.__new__(Outcome)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.tactic = tactic
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Outcome(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Outcome), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":605
 *     cdef init(C_Outcome_Reader reader, tactic: Tactic_Reader | Unknown, GraphId graph, GraphIndex *graph_index):
 *         cdef Outcome wrapper = Outcome.__new__(Outcome)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.tactic = tactic
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":606
 *         cdef Outcome wrapper = Outcome.__new__(Outcome)
 *         wrapper.reader = reader
 *         wrapper.tactic = tactic             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 */
  __Pyx_INCREF(__pyx_v_tactic);
  __Pyx_GIVEREF(__pyx_v_tactic);
  __Pyx_GOTREF(__pyx_v_wrapper->tactic);
  __Pyx_DECREF(__pyx_v_wrapper->tactic);
  __pyx_v_wrapper->tactic = __pyx_v_tactic;

  /* "pytact/data_reader.pyx":607
 *         wrapper.reader = reader
 *         wrapper.tactic = tactic
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         return wrapper
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":608
 *         wrapper.tactic = tactic
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":609
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":603
 * 
 *     @staticmethod
 *     cdef init(C_Outcome_Reader reader, tactic: Tactic_Reader | Unknown, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef Outcome wrapper = Outcome.__new__(Outcome)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":611
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return Outcome_Reader.init(self.reader, None)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_8lowlevel_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_8lowlevel_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_8lowlevel___get__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":613
 *     @property
 *     def lowlevel(self):
 *         return Outcome_Reader.init(self.reader, None)             # <<<<<<<<<<<<<<
 *     def __repr__(self):
 *         return repr(self.lowlevel)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Reader->init(__pyx_v_self->reader, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":611
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return Outcome_Reader.init(self.reader, None)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.lowlevel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":614
 *     def lowlevel(self):
 *         return Outcome_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_1__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_1__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome___repr__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome___repr__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pytact/data_reader.pyx":615
 *         return Outcome_Reader.init(self.reader, None)
 *     def __repr__(self):
 *         return repr(self.lowlevel)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_lowlevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 615, __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;

  /* "pytact/data_reader.pyx":614
 *     def lowlevel(self):
 *         return Outcome_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":617
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def before(self) -> ProofState:
 *         """The proof state before the tactic execution."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_6before_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_6before_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_6before___get__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_6before___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  ProofState::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":620
 *     def before(self) -> ProofState:
 *         """The proof state before the tactic execution."""
 *         return ProofState.init(self.reader.getBefore(), self.graph, self.graph_index)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getBefore();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 620, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_6pytact_11data_reader_10ProofState_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), __pyx_v_self->graph, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":617
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def before(self) -> ProofState:
 *         """The proof state before the tactic execution."""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.before.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":622
 *         return ProofState.init(self.reader.getBefore(), self.graph, self.graph_index)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def after(self) -> Sequence[ProofState]:
 *         """The new proof states that were generated by the tactic."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_5after_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_5after_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_5after___get__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_5after___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":625
 *     def after(self) -> Sequence[ProofState]:
 *         """The new proof states that were generated by the tactic."""
 *         return ProofState_List.init(self.reader.getAfter(), self.graph_index, self.graph)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getAfter();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 625, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_6pytact_11data_reader_15ProofState_List_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), __pyx_v_self->graph_index, __pyx_v_self->graph); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":622
 *         return ProofState.init(self.reader.getBefore(), self.graph, self.graph_index)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def after(self) -> Sequence[ProofState]:
 *         """The new proof states that were generated by the tactic."""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.after.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":627
 *         return ProofState_List.init(self.reader.getAfter(), self.graph_index, self.graph)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def term(self) -> Node:
 *         """The proof term that witnesses the transition from the before state to the after states. It contains a
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_4term_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_4term_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_4term___get__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_4term___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  Outcome::Term::Reader __pyx_v_term;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Outcome::Term::Reader __pyx_t_1;
  uint16_t __pyx_t_2;
  uint32_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":633
 *         the before state.
 *         """
 *         term = self.reader.getTerm()             # <<<<<<<<<<<<<<
 *         return Node.init(self.graph_index.local_to_global[self.graph][term.getDepIndex()],
 *                          term.getNodeIndex(), self.graph_index)
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getTerm();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 633, __pyx_L1_error)
  }
  __pyx_v_term = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":634
 *         """
 *         term = self.reader.getTerm()
 *         return Node.init(self.graph_index.local_to_global[self.graph][term.getDepIndex()],             # <<<<<<<<<<<<<<
 *                          term.getNodeIndex(), self.graph_index)
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_2 = __pyx_v_term.getDepIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 634, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":635
 *         term = self.reader.getTerm()
 *         return Node.init(self.graph_index.local_to_global[self.graph][term.getDepIndex()],
 *                          term.getNodeIndex(), self.graph_index)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  try {
    __pyx_t_3 = __pyx_v_term.getNodeIndex();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 635, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":634
 *         """
 *         term = self.reader.getTerm()
 *         return Node.init(self.graph_index.local_to_global[self.graph][term.getDepIndex()],             # <<<<<<<<<<<<<<
 *                          term.getNodeIndex(), self.graph_index)
 * 
 */
  __pyx_t_4 = __pyx_f_6pytact_11data_reader_4Node_init(((__pyx_v_self->graph_index->local_to_global[__pyx_v_self->graph])[__pyx_t_2]), __pyx_t_3, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":627
 *         return ProofState_List.init(self.reader.getAfter(), self.graph_index, self.graph)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def term(self) -> Node:
 *         """The proof term that witnesses the transition from the before state to the after states. It contains a
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.term.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":637
 *                          term.getNodeIndex(), self.graph_index)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def term_text(self) -> str:
 *         """A textual representation of the proof term."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_9term_text_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_9term_text_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_9term_text___get__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_9term_text___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::kj::StringPtr __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":640
 *     def term_text(self) -> str:
 *         """A textual representation of the proof term."""
 *         temp = self.reader.getTermText()             # <<<<<<<<<<<<<<
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getTermText();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 640, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":641
 *         """A textual representation of the proof term."""
 *         temp = self.reader.getTermText()
 *         return (<char*>temp.begin())[:temp.size()]             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":637
 *                          term.getNodeIndex(), self.graph_index)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def term_text(self) -> str:
 *         """A textual representation of the proof term."""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.term_text.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":643
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def tactic_arguments(self) -> Sequence[Node | Unresolvable]:
 *         """The arguments of the tactic that produced this outcome.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_16tactic_arguments_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_16tactic_arguments_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_16tactic_arguments___get__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_16tactic_arguments___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
   ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader __pyx_v_args;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __pyx_t_6pytact_11data_reader_GraphId __pyx_t_1;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_2;
   ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":650
 *         Sometimes, an argument is not resolvable to a term, in which case it is marked as `Unresolvable`.
 *         """
 *         graph = self.graph             # <<<<<<<<<<<<<<
 *         graph_index = self.graph_index
 *         args = self.reader.getTacticArguments()
 */
  __pyx_t_1 = __pyx_v_self->graph;
  __pyx_v_graph = __pyx_t_1;

  /* "pytact/data_reader.pyx":651
 *         """
 *         graph = self.graph
 *         graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         args = self.reader.getTacticArguments()
 *         return Argument_List.init(args, graph_index, graph)
 */
  __pyx_t_2 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_2;

  /* "pytact/data_reader.pyx":652
 *         graph = self.graph
 *         graph_index = self.graph_index
 *         args = self.reader.getTacticArguments()             # <<<<<<<<<<<<<<
 *         return Argument_List.init(args, graph_index, graph)
 * 
 */
  try {
    __pyx_t_3 = __pyx_v_self->reader.getTacticArguments();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 652, __pyx_L1_error)
  }
  __pyx_v_args = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_3);

  /* "pytact/data_reader.pyx":653
 *         graph_index = self.graph_index
 *         args = self.reader.getTacticArguments()
 *         return Argument_List.init(args, graph_index, graph)             # <<<<<<<<<<<<<<
 * 
 * cdef class Outcome_List:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __pyx_f_6pytact_11data_reader_13Argument_List_init(__pyx_v_args, __pyx_v_graph_index, __pyx_v_graph); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 653, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":643
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def tactic_arguments(self) -> Sequence[Node | Unresolvable]:
 *         """The arguments of the tactic that produced this outcome.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("pytact.data_reader.Outcome.tactic_arguments.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":594
 *     cdef GraphId graph
 *     cdef GraphIndex *graph_index
 *     cdef readonly object tactic # : Tactic_Reader | Unknown             # <<<<<<<<<<<<<<
 *     """The tactic that generated the outcome. For it's arguments, see `tactic_arguments`
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_6tactic_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_6tactic_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_6tactic___get__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_6tactic___get__(struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->tactic);
  __pyx_r = __pyx_v_self->tactic;
  goto __pyx_L0;

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Outcome_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Outcome_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_2__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Outcome.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Outcome_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Outcome_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_7Outcome_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Outcome.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Outcome_4__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Outcome *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Outcome_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Outcome.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":662
 * 
 *     @staticmethod
 *     cdef init(C_Outcome_Reader_List reader, object tactic, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Outcome_List wrapper = Outcome_List.__new__(Outcome_List)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_12Outcome_List_init( ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, PyObject *__pyx_v_tactic, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph) {
  struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":663
 *     @staticmethod
 *     cdef init(C_Outcome_Reader_List reader, object tactic, GraphIndex *graph_index, GraphId graph):
 *         cdef Outcome_List wrapper = Outcome_List.__new__(Outcome_List)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.tactic = tactic
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Outcome_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Outcome_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 663, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Outcome_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":664
 *     cdef init(C_Outcome_Reader_List reader, object tactic, GraphIndex *graph_index, GraphId graph):
 *         cdef Outcome_List wrapper = Outcome_List.__new__(Outcome_List)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.tactic = tactic
 *         wrapper.graph_index = graph_index
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":665
 *         cdef Outcome_List wrapper = Outcome_List.__new__(Outcome_List)
 *         wrapper.reader = reader
 *         wrapper.tactic = tactic             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __Pyx_INCREF(__pyx_v_tactic);
  __Pyx_GIVEREF(__pyx_v_tactic);
  __Pyx_GOTREF(__pyx_v_wrapper->tactic);
  __Pyx_DECREF(__pyx_v_wrapper->tactic);
  __pyx_v_wrapper->tactic = __pyx_v_tactic;

  /* "pytact/data_reader.pyx":666
 *         wrapper.reader = reader
 *         wrapper.tactic = tactic
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         return wrapper
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":667
 *         wrapper.tactic = tactic
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":668
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> Outcome:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":662
 * 
 *     @staticmethod
 *     cdef init(C_Outcome_Reader_List reader, object tactic, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Outcome_List wrapper = Outcome_List.__new__(Outcome_List)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Outcome_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":670
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Outcome:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_12Outcome_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_12Outcome_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 670, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Outcome_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_12Outcome_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_Outcome_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_12Outcome_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
   ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  Outcome::Reader __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":671
 * 
 *     def __getitem__(self, uint index) -> Outcome:
 *         reader = self.reader             # <<<<<<<<<<<<<<
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":672
 *     def __getitem__(self, uint index) -> Outcome:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return Outcome.init(reader[index], self.tactic, self.graph, self.graph_index)
 */
  __pyx_t_2 = (__pyx_v_index >= __pyx_v_reader.size());
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":673
 *         reader = self.reader
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         return Outcome.init(reader[index], self.tactic, self.graph, self.graph_index)
 * 
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 673, __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, 673, __pyx_L1_error)

    /* "pytact/data_reader.pyx":672
 *     def __getitem__(self, uint index) -> Outcome:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return Outcome.init(reader[index], self.tactic, self.graph, self.graph_index)
 */
  }

  /* "pytact/data_reader.pyx":674
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 *         return Outcome.init(reader[index], self.tactic, self.graph, self.graph_index)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_4 = __pyx_v_reader[__pyx_v_index];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 674, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_v_self->tactic;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = __pyx_f_6pytact_11data_reader_7Outcome_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4), __pyx_t_3, __pyx_v_self->graph, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":670
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Outcome:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.Outcome_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":676
 *         return Outcome.init(reader[index], self.tactic, self.graph, self.graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_12Outcome_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_12Outcome_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_12Outcome_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_Outcome_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":677
 * 
 *     def __len__(self):
 *         return self.reader.size()             # <<<<<<<<<<<<<<
 * 
 * cdef class ProofStep:
 */
  __pyx_r = __pyx_v_self->reader.size();
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":676
 *         return Outcome.init(reader[index], self.tactic, self.graph, self.graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_12Outcome_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_12Outcome_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_12Outcome_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_12Outcome_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_12Outcome_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Outcome_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_12Outcome_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Outcome_List.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_12Outcome_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_12Outcome_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_12Outcome_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_12Outcome_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Outcome_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_12Outcome_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Outcome_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_12Outcome_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Outcome_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Outcome_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":688
 * 
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader reader, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef ProofStep wrapper = ProofStep.__new__(ProofStep)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_9ProofStep_init(ProofStep::Reader __pyx_v_reader, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index) {
  struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":689
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader reader, GraphId graph, GraphIndex *graph_index):
 *         cdef ProofStep wrapper = ProofStep.__new__(ProofStep)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph = graph
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_ProofStep(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_ProofStep), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 689, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_ProofStep *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":690
 *     cdef init(C_ProofStep_Reader reader, GraphId graph, GraphIndex *graph_index):
 *         cdef ProofStep wrapper = ProofStep.__new__(ProofStep)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":691
 *         cdef ProofStep wrapper = ProofStep.__new__(ProofStep)
 *         wrapper.reader = reader
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         return wrapper
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":692
 *         wrapper.reader = reader
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":693
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":688
 * 
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader reader, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef ProofStep wrapper = ProofStep.__new__(ProofStep)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":695
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return ProofStep_Reader.init(self.reader, None)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_8lowlevel_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_8lowlevel_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_9ProofStep_8lowlevel___get__(((struct __pyx_obj_6pytact_11data_reader_ProofStep *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":697
 *     @property
 *     def lowlevel(self):
 *         return ProofStep_Reader.init(self.reader, None)             # <<<<<<<<<<<<<<
 *     def __repr__(self):
 *         return repr(self.lowlevel)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Reader->init(__pyx_v_self->reader, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 697, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":695
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return ProofStep_Reader.init(self.reader, None)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.lowlevel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":698
 *     def lowlevel(self):
 *         return ProofStep_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_1__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_1__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_9ProofStep___repr__(((struct __pyx_obj_6pytact_11data_reader_ProofStep *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep___repr__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pytact/data_reader.pyx":699
 *         return ProofStep_Reader.init(self.reader, None)
 *     def __repr__(self):
 *         return repr(self.lowlevel)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_lowlevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 699, __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;

  /* "pytact/data_reader.pyx":698
 *     def lowlevel(self):
 *         return ProofStep_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":701
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def tactic(self) -> Tactic_Reader | Unknown:
 *         """The tactic that generated the proof step. Note that the arguments of the tactic can be found in the
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_6tactic_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_6tactic_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_9ProofStep_6tactic___get__(((struct __pyx_obj_6pytact_11data_reader_ProofStep *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_6tactic___get__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self) {
  ProofStep::Tactic::Reader __pyx_v_tactic;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  ProofStep::Tactic::Reader __pyx_t_1;
  bool __pyx_t_2;
  int __pyx_t_3;
  Tactic::Reader __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":710
 *         happens for tactics that are known to be unsafe like `change_no_check`, `fix`, `cofix` and more.
 *         """
 *         tactic = self.reader.getTactic()             # <<<<<<<<<<<<<<
 *         if tactic.isUnknown():
 *             return None
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getTactic();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 710, __pyx_L1_error)
  }
  __pyx_v_tactic = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":711
 *         """
 *         tactic = self.reader.getTactic()
 *         if tactic.isUnknown():             # <<<<<<<<<<<<<<
 *             return None
 *         elif tactic.isKnown():
 */
  try {
    __pyx_t_2 = __pyx_v_tactic.isUnknown();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 711, __pyx_L1_error)
  }
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":712
 *         tactic = self.reader.getTactic()
 *         if tactic.isUnknown():
 *             return None             # <<<<<<<<<<<<<<
 *         elif tactic.isKnown():
 *             return Tactic_Reader.init(tactic.getKnown(), None)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":711
 *         """
 *         tactic = self.reader.getTactic()
 *         if tactic.isUnknown():             # <<<<<<<<<<<<<<
 *             return None
 *         elif tactic.isKnown():
 */
  }

  /* "pytact/data_reader.pyx":713
 *         if tactic.isUnknown():
 *             return None
 *         elif tactic.isKnown():             # <<<<<<<<<<<<<<
 *             return Tactic_Reader.init(tactic.getKnown(), None)
 *         else: assert False
 */
  try {
    __pyx_t_2 = __pyx_v_tactic.isKnown();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 713, __pyx_L1_error)
  }
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":714
 *             return None
 *         elif tactic.isKnown():
 *             return Tactic_Reader.init(tactic.getKnown(), None)             # <<<<<<<<<<<<<<
 *         else: assert False
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    try {
      __pyx_t_4 = __pyx_v_tactic.getKnown();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 714, __pyx_L1_error)
    }
    __pyx_t_5 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Tactic_Reader->init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4), Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = __pyx_t_5;
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":713
 *         if tactic.isUnknown():
 *             return None
 *         elif tactic.isKnown():             # <<<<<<<<<<<<<<
 *             return Tactic_Reader.init(tactic.getKnown(), None)
 *         else: assert False
 */
  }

  /* "pytact/data_reader.pyx":715
 *         elif tactic.isKnown():
 *             return Tactic_Reader.init(tactic.getKnown(), None)
 *         else: assert False             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
        __PYX_ERR(0, 715, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(0, 715, __pyx_L1_error)
    #endif
  }

  /* "pytact/data_reader.pyx":701
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def tactic(self) -> Tactic_Reader | Unknown:
 *         """The tactic that generated the proof step. Note that the arguments of the tactic can be found in the
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.tactic.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":717
 *         else: assert False
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def outcomes(self) -> Sequence[Outcome]:
 *         """A list of transformations of proof states to other proof states, as executed by the tactic of the proof
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_8outcomes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_8outcomes_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_9ProofStep_8outcomes___get__(((struct __pyx_obj_6pytact_11data_reader_ProofStep *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_8outcomes___get__(struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":722
 *         step
 *         """
 *         return Outcome_List.init(self.reader.getOutcomes(), self.tactic, self.graph_index, self.graph)             # <<<<<<<<<<<<<<
 * 
 * cdef class ProofStep_List:
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getOutcomes();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 722, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_tactic); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_f_6pytact_11data_reader_12Outcome_List_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), __pyx_t_2, __pyx_v_self->graph_index, __pyx_v_self->graph); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 722, __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;

  /* "pytact/data_reader.pyx":717
 *         else: assert False
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def outcomes(self) -> Sequence[Outcome]:
 *         """A list of transformations of proof states to other proof states, as executed by the tactic of the proof
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.outcomes.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9ProofStep_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9ProofStep_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_9ProofStep_2__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofStep *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9ProofStep_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9ProofStep_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_9ProofStep_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_9ProofStep_4__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofStep *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_9ProofStep_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofStep.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":730
 * 
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef ProofStep_List wrapper = ProofStep_List.__new__(ProofStep_List)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_14ProofStep_List_init( ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph) {
  struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":731
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef ProofStep_List wrapper = ProofStep_List.__new__(ProofStep_List)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_ProofStep_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_ProofStep_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 731, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_ProofStep_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":732
 *     cdef init(C_ProofStep_Reader_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef ProofStep_List wrapper = ProofStep_List.__new__(ProofStep_List)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":733
 *         cdef ProofStep_List wrapper = ProofStep_List.__new__(ProofStep_List)
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         return wrapper
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":734
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":735
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> ProofStep:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":730
 * 
 *     @staticmethod
 *     cdef init(C_ProofStep_Reader_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef ProofStep_List wrapper = ProofStep_List.__new__(ProofStep_List)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.ProofStep_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":737
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> ProofStep:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_14ProofStep_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_14ProofStep_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 737, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofStep_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_14ProofStep_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_ProofStep_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_14ProofStep_List___getitem__(struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
   ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader __pyx_v_reader;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  ProofStep::Reader __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":738
 * 
 *     def __getitem__(self, uint index) -> ProofStep:
 *         reader = self.reader             # <<<<<<<<<<<<<<
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":739
 *     def __getitem__(self, uint index) -> ProofStep:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return ProofStep.init(reader[index], self.graph, self.graph_index)
 */
  __pyx_t_2 = (__pyx_v_index >= __pyx_v_reader.size());
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":740
 *         reader = self.reader
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         return ProofStep.init(reader[index], self.graph, self.graph_index)
 * 
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 740, __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, 740, __pyx_L1_error)

    /* "pytact/data_reader.pyx":739
 *     def __getitem__(self, uint index) -> ProofStep:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return ProofStep.init(reader[index], self.graph, self.graph_index)
 */
  }

  /* "pytact/data_reader.pyx":741
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 *         return ProofStep.init(reader[index], self.graph, self.graph_index)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_4 = __pyx_v_reader[__pyx_v_index];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 741, __pyx_L1_error)
  }
  __pyx_t_3 = __pyx_f_6pytact_11data_reader_9ProofStep_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_4), __pyx_v_self->graph, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":737
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> ProofStep:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.ProofStep_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":743
 *         return ProofStep.init(reader[index], self.graph, self.graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_14ProofStep_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_14ProofStep_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_14ProofStep_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_ProofStep_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":744
 * 
 *     def __len__(self):
 *         return self.reader.size()             # <<<<<<<<<<<<<<
 * 
 * cdef class Representative_List:
 */
  __pyx_r = __pyx_v_self->reader.size();
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":743
 *         return ProofStep.init(reader[index], self.graph, self.graph_index)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_14ProofStep_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_14ProofStep_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_14ProofStep_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_14ProofStep_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_14ProofStep_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofStep_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_14ProofStep_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofStep_List.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_14ProofStep_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_14ProofStep_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_14ProofStep_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_14ProofStep_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofStep_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_14ProofStep_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_ProofStep_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_14ProofStep_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_ProofStep_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.ProofStep_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":752
 * 
 *     @staticmethod
 *     cdef init(C_Uint16_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Representative_List wrapper = Representative_List.__new__(Representative_List)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_19Representative_List_init( ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph) {
  struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":753
 *     @staticmethod
 *     cdef init(C_Uint16_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Representative_List wrapper = Representative_List.__new__(Representative_List)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Representative_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Representative_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 753, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Representative_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":754
 *     cdef init(C_Uint16_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Representative_List wrapper = Representative_List.__new__(Representative_List)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":755
 *         cdef Representative_List wrapper = Representative_List.__new__(Representative_List)
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         return wrapper
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":756
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":757
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> Definition:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":752
 * 
 *     @staticmethod
 *     cdef init(C_Uint16_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Representative_List wrapper = Representative_List.__new__(Representative_List)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Representative_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":759
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Definition:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_19Representative_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_19Representative_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 759, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Representative_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_19Representative_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_Representative_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_19Representative_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
   ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_v_reader;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  uint32_t __pyx_v_depgraph;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_4;
  uint16_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":760
 * 
 *     def __getitem__(self, uint index) -> Definition:
 *         reader = self.reader             # <<<<<<<<<<<<<<
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":761
 *     def __getitem__(self, uint index) -> Definition:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 * 
 */
  __pyx_t_2 = (__pyx_v_index >= __pyx_v_reader.size());
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":762
 *         reader = self.reader
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 * 
 *         graph_index = self.graph_index
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 762, __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, 762, __pyx_L1_error)

    /* "pytact/data_reader.pyx":761
 *     def __getitem__(self, uint index) -> Definition:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 * 
 */
  }

  /* "pytact/data_reader.pyx":764
 *             raise IndexError('Out of bounds')
 * 
 *         graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         depgraph = graph_index.local_to_global[self.graph][reader[index]]
 *         return cast(Definition, Node.init(depgraph, graph_index.representatives[depgraph],
 */
  __pyx_t_4 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_4;

  /* "pytact/data_reader.pyx":765
 * 
 *         graph_index = self.graph_index
 *         depgraph = graph_index.local_to_global[self.graph][reader[index]]             # <<<<<<<<<<<<<<
 *         return cast(Definition, Node.init(depgraph, graph_index.representatives[depgraph],
 *                                           graph_index).definition)
 */
  try {
    __pyx_t_5 = __pyx_v_reader[__pyx_v_index];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 765, __pyx_L1_error)
  }
  __pyx_v_depgraph = ((__pyx_v_graph_index->local_to_global[__pyx_v_self->graph])[__pyx_t_5]);

  /* "pytact/data_reader.pyx":766
 *         graph_index = self.graph_index
 *         depgraph = graph_index.local_to_global[self.graph][reader[index]]
 *         return cast(Definition, Node.init(depgraph, graph_index.representatives[depgraph],             # <<<<<<<<<<<<<<
 *                                           graph_index).definition)
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_cast); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "pytact/data_reader.pyx":767
 *         depgraph = graph_index.local_to_global[self.graph][reader[index]]
 *         return cast(Definition, Node.init(depgraph, graph_index.representatives[depgraph],
 *                                           graph_index).definition)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __pyx_t_7 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_depgraph, (__pyx_v_graph_index->representatives[__pyx_v_depgraph]), __pyx_v_graph_index); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_definition); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 767, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_9 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_7, ((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_t_8};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 766, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":759
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Definition:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("pytact.data_reader.Representative_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":769
 *                                           graph_index).definition)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_19Representative_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_19Representative_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_19Representative_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_Representative_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":770
 * 
 *     def __len__(self):
 *         return self.reader.size()             # <<<<<<<<<<<<<<
 * 
 * @dataclass
 */
  __pyx_r = __pyx_v_self->reader.size();
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":769
 *                                           graph_index).definition)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_19Representative_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_19Representative_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_19Representative_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_19Representative_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_19Representative_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Representative_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_19Representative_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Representative_List.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_19Representative_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_19Representative_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_19Representative_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_19Representative_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Representative_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_19Representative_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Representative_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_19Representative_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Representative_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Representative_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":814
 * 
 *     @staticmethod
 *     cdef init(Node node, C_Definition_Reader reader, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef Definition wrapper = Definition.__new__(Definition)
 *         wrapper.node = node
 */

static PyObject *__pyx_f_6pytact_11data_reader_10Definition_init(struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_node, Definition::Reader __pyx_v_reader, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index) {
  struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":815
 *     @staticmethod
 *     cdef init(Node node, C_Definition_Reader reader, GraphId graph, GraphIndex *graph_index):
 *         cdef Definition wrapper = Definition.__new__(Definition)             # <<<<<<<<<<<<<<
 *         wrapper.node = node
 *         wrapper.reader = reader
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Definition(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 815, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":816
 *     cdef init(Node node, C_Definition_Reader reader, GraphId graph, GraphIndex *graph_index):
 *         cdef Definition wrapper = Definition.__new__(Definition)
 *         wrapper.node = node             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph = graph
 */
  __Pyx_INCREF((PyObject *)__pyx_v_node);
  __Pyx_GIVEREF((PyObject *)__pyx_v_node);
  __Pyx_GOTREF((PyObject *)__pyx_v_wrapper->node);
  __Pyx_DECREF((PyObject *)__pyx_v_wrapper->node);
  __pyx_v_wrapper->node = __pyx_v_node;

  /* "pytact/data_reader.pyx":817
 *         cdef Definition wrapper = Definition.__new__(Definition)
 *         wrapper.node = node
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":818
 *         wrapper.node = node
 *         wrapper.reader = reader
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         return wrapper
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":819
 *         wrapper.reader = reader
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":820
 *         wrapper.graph = graph
 *         wrapper.graph_index = graph_index
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":814
 * 
 *     @staticmethod
 *     cdef init(Node node, C_Definition_Reader reader, GraphId graph, GraphIndex *graph_index):             # <<<<<<<<<<<<<<
 *         cdef Definition wrapper = Definition.__new__(Definition)
 *         wrapper.node = node
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Definition.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":822
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return Definition_Reader.init(self.reader, None)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_8lowlevel_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_8lowlevel_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_8lowlevel___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":824
 *     @property
 *     def lowlevel(self):
 *         return Definition_Reader.init(self.reader, None)             # <<<<<<<<<<<<<<
 *     def __repr__(self):
 *         return repr(self.lowlevel)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Reader->init(__pyx_v_self->reader, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":822
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return Definition_Reader.init(self.reader, None)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Definition.lowlevel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":825
 *     def lowlevel(self):
 *         return Definition_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_1__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_1__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition___repr__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition___repr__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pytact/data_reader.pyx":826
 *         return Definition_Reader.init(self.reader, None)
 *     def __repr__(self):
 *         return repr(self.lowlevel)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other: Definition) -> bool:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_lowlevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __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;

  /* "pytact/data_reader.pyx":825
 *     def lowlevel(self):
 *         return Definition_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Definition.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":828
 *         return repr(self.lowlevel)
 * 
 *     def __eq__(self, other: Definition) -> bool:             # <<<<<<<<<<<<<<
 *         """Physical equality of two nodes. Note that two nodes with a different physical equality
 *         may have the same `identity`. See `identity` for details.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_10Definition_2__eq__, "Physical equality of two nodes. Note that two nodes with a different physical equality\n        may have the same `identity`. See `identity` for details.\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_6pytact_11data_reader_10Definition_2__eq__;
#endif
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_3__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_ptype_6pytact_11data_reader_Definition, 0, "other", 0))) __PYX_ERR(0, 828, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_2__eq__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self), ((struct __pyx_obj_6pytact_11data_reader_Definition *)__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_6pytact_11data_reader_10Definition_2__eq__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "pytact/data_reader.pyx":832
 *         may have the same `identity`. See `identity` for details.
 *         """
 *         if isinstance(other, Definition):             # <<<<<<<<<<<<<<
 *             return self.node == other.node
 *         return False
 */
  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_other), __pyx_ptype_6pytact_11data_reader_Definition); 
  if (__pyx_t_1) {

    /* "pytact/data_reader.pyx":833
 *         """
 *         if isinstance(other, Definition):
 *             return self.node == other.node             # <<<<<<<<<<<<<<
 *         return False
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_v_self->node), ((PyObject *)__pyx_v_other->node), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":832
 *         may have the same `identity`. See `identity` for details.
 *         """
 *         if isinstance(other, Definition):             # <<<<<<<<<<<<<<
 *             return self.node == other.node
 *         return False
 */
  }

  /* "pytact/data_reader.pyx":834
 *         if isinstance(other, Definition):
 *             return self.node == other.node
 *         return False             # <<<<<<<<<<<<<<
 * 
 *     def __hash__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_False);
  __pyx_r = Py_False;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":828
 *         return repr(self.lowlevel)
 * 
 *     def __eq__(self, other: Definition) -> bool:             # <<<<<<<<<<<<<<
 *         """Physical equality of two nodes. Note that two nodes with a different physical equality
 *         may have the same `identity`. See `identity` for details.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Definition.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":836
 *         return False
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         """A hash that is corresponds to physical equality, not to be confused by `identity`."""
 *         return hash(self.node)
 */

/* Python wrapper */
static Py_hash_t __pyx_pw_6pytact_11data_reader_10Definition_5__hash__(PyObject *__pyx_v_self); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_10Definition_4__hash__, "A hash that is corresponds to physical equality, not to be confused by `identity`.");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_6pytact_11data_reader_10Definition_4__hash__;
#endif
static Py_hash_t __pyx_pw_6pytact_11data_reader_10Definition_5__hash__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_4__hash__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static Py_hash_t __pyx_pf_6pytact_11data_reader_10Definition_4__hash__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  Py_hash_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_hash_t __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__hash__", 0);

  /* "pytact/data_reader.pyx":838
 *     def __hash__(self):
 *         """A hash that is corresponds to physical equality, not to be confused by `identity`."""
 *         return hash(self.node)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __pyx_t_1 = ((PyObject *)__pyx_v_self->node);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 838, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":836
 *         return False
 * 
 *     def __hash__(self):             # <<<<<<<<<<<<<<
 *         """A hash that is corresponds to physical equality, not to be confused by `identity`."""
 *         return hash(self.node)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Definition.__hash__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":840
 *         return hash(self.node)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def name(self) -> str:
 *         """The fully-qualified name of the definition. The name should be unique in a particular global context,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_4name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_4name_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_4name___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_4name___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::kj::StringPtr __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":845
 *         but is not unique among different branches of the global in a dataset.
 *         """
 *         temp = self.reader.getName()             # <<<<<<<<<<<<<<
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getName();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 845, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":846
 *         """
 *         temp = self.reader.getName()
 *         return (<char*>temp.begin())[:temp.size()]             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":840
 *         return hash(self.node)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def name(self) -> str:
 *         """The fully-qualified name of the definition. The name should be unique in a particular global context,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Definition.name.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":848
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def previous(self) -> Definition | None:
 *         """The previous definition within the global context of the current file.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_8previous_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_8previous_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_8previous___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_8previous___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  uint32_t __pyx_v_nodeid;
  PyObject *__pyx_v_node = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  uint32_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":858
 *         recursive definitions. Those nodes are placed into the global context in an arbitrary ordering.
 *         """
 *         nodeid = self.reader.getPrevious()             # <<<<<<<<<<<<<<
 *         if self.graph_index.nodes[self.graph].size() == nodeid:
 *             return None
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getPrevious();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 858, __pyx_L1_error)
  }
  __pyx_v_nodeid = __pyx_t_1;

  /* "pytact/data_reader.pyx":859
 *         """
 *         nodeid = self.reader.getPrevious()
 *         if self.graph_index.nodes[self.graph].size() == nodeid:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  __pyx_t_2 = ((__pyx_v_self->graph_index->nodes[__pyx_v_self->graph]).size() == __pyx_v_nodeid);
  if (__pyx_t_2) {

    /* "pytact/data_reader.pyx":860
 *         nodeid = self.reader.getPrevious()
 *         if self.graph_index.nodes[self.graph].size() == nodeid:
 *             return None             # <<<<<<<<<<<<<<
 *         else:
 *             node = Node.init(self.graph, nodeid, self.graph_index)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":859
 *         """
 *         nodeid = self.reader.getPrevious()
 *         if self.graph_index.nodes[self.graph].size() == nodeid:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  }

  /* "pytact/data_reader.pyx":862
 *             return None
 *         else:
 *             node = Node.init(self.graph, nodeid, self.graph_index)             # <<<<<<<<<<<<<<
 *             return node.definition
 * 
 */
  /*else*/ {
    __pyx_t_3 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_v_nodeid, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 862, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_node = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":863
 *         else:
 *             node = Node.init(self.graph, nodeid, self.graph_index)
 *             return node.definition             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_node, __pyx_n_s_definition); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 863, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":848
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def previous(self) -> Definition | None:
 *         """The previous definition within the global context of the current file.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.Definition.previous.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_node);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":865
 *             return node.definition
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def external_previous(self) -> Sequence[Definition]:
 *         """A list of definitions that are the representatives of files other than the current file that are
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_17external_previous_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_17external_previous_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_17external_previous___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_17external_previous___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":873
 *         Note that this is a lowlevel property. Prefer to use `global_context` or `clustered_global_context`.
 *         """
 *         return Representative_List.init(self.reader.getExternalPrevious(), self.graph_index, self.graph)             # <<<<<<<<<<<<<<
 * 
 *     def _global_context(self, across_files : bool, inclusive, seen : set[Node]):
 */
  __Pyx_XDECREF(__pyx_r);
  try {
    __pyx_t_1 = __pyx_v_self->reader.getExternalPrevious();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 873, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_6pytact_11data_reader_19Representative_List_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1), __pyx_v_self->graph_index, __pyx_v_self->graph); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":865
 *             return node.definition
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def external_previous(self) -> Sequence[Definition]:
 *         """A list of definitions that are the representatives of files other than the current file that are
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Definition.external_previous.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_10Definition_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":875
 *         return Representative_List.init(self.reader.getExternalPrevious(), self.graph_index, self.graph)
 * 
 *     def _global_context(self, across_files : bool, inclusive, seen : set[Node]):             # <<<<<<<<<<<<<<
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_7_global_context(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10Definition_7_global_context = {"_global_context", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_7_global_context, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_7_global_context(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_across_files = 0;
  PyObject *__pyx_v_inclusive = 0;
  PyObject *__pyx_v_seen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_global_context (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_inclusive,&__pyx_n_s_seen,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_inclusive,&__pyx_n_s_seen,0};
    #endif
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_across_files)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 875, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inclusive)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 875, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_global_context", 1, 3, 3, 1); __PYX_ERR(0, 875, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_seen)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 875, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_global_context", 1, 3, 3, 2); __PYX_ERR(0, 875, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_global_context") < 0)) __PYX_ERR(0, 875, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_across_files = values[0];
    __pyx_v_inclusive = values[1];
    __pyx_v_seen = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_global_context", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 875, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition._global_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_6_global_context(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self), __pyx_v_across_files, __pyx_v_inclusive, __pyx_v_seen);

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_6_global_context(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_inclusive, PyObject *__pyx_v_seen) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_global_context", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_2__global_context(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 875, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__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_across_files = __pyx_v_across_files;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_across_files);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_across_files);
  __pyx_cur_scope->__pyx_v_inclusive = __pyx_v_inclusive;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_inclusive);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_inclusive);
  __pyx_cur_scope->__pyx_v_seen = __pyx_v_seen;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_seen);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_seen);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_10Definition_8generator2, __pyx_codeobj__12, (PyObject *) __pyx_cur_scope, __pyx_n_s_global_context, __pyx_n_s_Definition__global_context, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 875, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition._global_context", __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_6pytact_11data_reader_10Definition_8generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  PyObject *(*__pyx_t_8)(PyObject *);
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_global_context", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L11_resume_from_yield;
    case 2: goto __pyx_L16_resume_from_yield_from;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 875, __pyx_L1_error)

  /* "pytact/data_reader.pyx":877
 *     def _global_context(self, across_files : bool, inclusive, seen : set[Node]):
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative             # <<<<<<<<<<<<<<
 *         if isinstance(d.kind, (Inductive, Constructor, Projection)):
 *             inclusive = True
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_cluster_representative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_d = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":878
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative
 *         if isinstance(d.kind, (Inductive, Constructor, Projection)):             # <<<<<<<<<<<<<<
 *             inclusive = True
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_d, __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Inductive); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Constructor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Projection); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); 
  if (!__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = PyObject_IsInstance(__pyx_t_1, __pyx_t_3); 
  if (!__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = PyObject_IsInstance(__pyx_t_1, __pyx_t_4); 
  __pyx_t_5 = __pyx_t_6;
  __pyx_L5_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":879
 *         d = self.cluster_representative
 *         if isinstance(d.kind, (Inductive, Constructor, Projection)):
 *             inclusive = True             # <<<<<<<<<<<<<<
 * 
 *         while d is not None:
 */
    __Pyx_INCREF(Py_True);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_inclusive);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_inclusive, Py_True);
    __Pyx_GIVEREF(Py_True);

    /* "pytact/data_reader.pyx":878
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative
 *         if isinstance(d.kind, (Inductive, Constructor, Projection)):             # <<<<<<<<<<<<<<
 *             inclusive = True
 * 
 */
  }

  /* "pytact/data_reader.pyx":881
 *             inclusive = True
 * 
 *         while d is not None:             # <<<<<<<<<<<<<<
 *             if inclusive: yield d # skip first result if not inclusive
 *             else: inclusive = True
 */
  while (1) {
    __pyx_t_5 = (__pyx_cur_scope->__pyx_v_d != Py_None);
    if (!__pyx_t_5) break;

    /* "pytact/data_reader.pyx":882
 * 
 *         while d is not None:
 *             if inclusive: yield d # skip first result if not inclusive             # <<<<<<<<<<<<<<
 *             else: inclusive = True
 *             if across_files:
 */
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_inclusive); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 882, __pyx_L1_error)
    if (__pyx_t_5) {
      __Pyx_INCREF(__pyx_cur_scope->__pyx_v_d);
      __pyx_r = __pyx_cur_scope->__pyx_v_d;
      __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_L11_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 882, __pyx_L1_error)
      goto __pyx_L10;
    }

    /* "pytact/data_reader.pyx":883
 *         while d is not None:
 *             if inclusive: yield d # skip first result if not inclusive
 *             else: inclusive = True             # <<<<<<<<<<<<<<
 *             if across_files:
 *                 for eprev in d.external_previous:
 */
    /*else*/ {
      __Pyx_INCREF(Py_True);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_inclusive);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_inclusive, Py_True);
      __Pyx_GIVEREF(Py_True);
    }
    __pyx_L10:;

    /* "pytact/data_reader.pyx":884
 *             if inclusive: yield d # skip first result if not inclusive
 *             else: inclusive = True
 *             if across_files:             # <<<<<<<<<<<<<<
 *                 for eprev in d.external_previous:
 *                     if eprev.node in seen: continue
 */
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_across_files); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 884, __pyx_L1_error)
    if (__pyx_t_5) {

      /* "pytact/data_reader.pyx":885
 *             else: inclusive = True
 *             if across_files:
 *                 for eprev in d.external_previous:             # <<<<<<<<<<<<<<
 *                     if eprev.node in seen: continue
 *                     yield from eprev._global_context(
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_d, __pyx_n_s_external_previous); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      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_7 = 0;
        __pyx_t_8 = NULL;
      } else {
        __pyx_t_7 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 885, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 885, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (likely(!__pyx_t_8)) {
          if (likely(PyList_CheckExact(__pyx_t_2))) {
            if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_2)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 885, __pyx_L1_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          } else {
            if (__pyx_t_7 >= 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_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 885, __pyx_L1_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 885, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          }
        } else {
          __pyx_t_1 = __pyx_t_8(__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, 885, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_eprev);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_eprev, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __pyx_t_1 = 0;

        /* "pytact/data_reader.pyx":886
 *             if across_files:
 *                 for eprev in d.external_previous:
 *                     if eprev.node in seen: continue             # <<<<<<<<<<<<<<
 *                     yield from eprev._global_context(
 *                         inclusive = True,
 */
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_eprev, __pyx_n_s_node_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_cur_scope->__pyx_v_seen, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 886, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (__pyx_t_5) {
          goto __pyx_L13_continue;
        }

        /* "pytact/data_reader.pyx":887
 *                 for eprev in d.external_previous:
 *                     if eprev.node in seen: continue
 *                     yield from eprev._global_context(             # <<<<<<<<<<<<<<
 *                         inclusive = True,
 *                         across_files = True,
 */
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_eprev, __pyx_n_s_global_context); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 887, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);

        /* "pytact/data_reader.pyx":888
 *                     if eprev.node in seen: continue
 *                     yield from eprev._global_context(
 *                         inclusive = True,             # <<<<<<<<<<<<<<
 *                         across_files = True,
 *                         seen = seen,
 */
        __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 888, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_inclusive, Py_True) < 0) __PYX_ERR(0, 888, __pyx_L1_error)

        /* "pytact/data_reader.pyx":889
 *                     yield from eprev._global_context(
 *                         inclusive = True,
 *                         across_files = True,             # <<<<<<<<<<<<<<
 *                         seen = seen,
 *                     )
 */
        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_across_files, Py_True) < 0) __PYX_ERR(0, 888, __pyx_L1_error)

        /* "pytact/data_reader.pyx":890
 *                         inclusive = True,
 *                         across_files = True,
 *                         seen = seen,             # <<<<<<<<<<<<<<
 *                     )
 *                     seen.add(eprev.node)
 */
        if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_seen, __pyx_cur_scope->__pyx_v_seen) < 0) __PYX_ERR(0, 888, __pyx_L1_error)

        /* "pytact/data_reader.pyx":887
 *                 for eprev in d.external_previous:
 *                     if eprev.node in seen: continue
 *                     yield from eprev._global_context(             # <<<<<<<<<<<<<<
 *                         inclusive = True,
 *                         across_files = True,
 */
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 887, __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_r = __Pyx_Generator_Yield_From(__pyx_generator, __pyx_t_4);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XGOTREF(__pyx_r);
        if (likely(__pyx_r)) {
          __Pyx_XGIVEREF(__pyx_t_2);
          __pyx_cur_scope->__pyx_t_0 = __pyx_t_2;
          __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
          __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
          __Pyx_XGIVEREF(__pyx_r);
          __Pyx_RefNannyFinishContext();
          __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
          /* return from generator, yielding value */
          __pyx_generator->resume_label = 2;
          return __pyx_r;
          __pyx_L16_resume_from_yield_from:;
          __pyx_t_2 = __pyx_cur_scope->__pyx_t_0;
          __pyx_cur_scope->__pyx_t_0 = 0;
          __Pyx_XGOTREF(__pyx_t_2);
          __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
          __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 887, __pyx_L1_error)
        } else {
          PyObject* exc_type = __Pyx_PyErr_Occurred();
          if (exc_type) {
            if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
            else __PYX_ERR(0, 887, __pyx_L1_error)
          }
        }

        /* "pytact/data_reader.pyx":892
 *                         seen = seen,
 *                     )
 *                     seen.add(eprev.node)             # <<<<<<<<<<<<<<
 *             d = d.previous
 * 
 */
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_seen, __pyx_n_s_add); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 892, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_eprev, __pyx_n_s_node_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 892, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_9 = NULL;
        __pyx_t_10 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
            __pyx_t_10 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_1};
          __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 892, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

        /* "pytact/data_reader.pyx":885
 *             else: inclusive = True
 *             if across_files:
 *                 for eprev in d.external_previous:             # <<<<<<<<<<<<<<
 *                     if eprev.node in seen: continue
 *                     yield from eprev._global_context(
 */
        __pyx_L13_continue:;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":884
 *             if inclusive: yield d # skip first result if not inclusive
 *             else: inclusive = True
 *             if across_files:             # <<<<<<<<<<<<<<
 *                 for eprev in d.external_previous:
 *                     if eprev.node in seen: continue
 */
    }

    /* "pytact/data_reader.pyx":893
 *                     )
 *                     seen.add(eprev.node)
 *             d = d.previous             # <<<<<<<<<<<<<<
 * 
 *     def global_context(self, across_files : bool = True, inclusive = False) -> Iterable[Definition]:
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_d, __pyx_n_s_previous); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 893, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_d);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_d, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __pyx_t_2 = 0;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":875
 *         return Representative_List.init(self.reader.getExternalPrevious(), self.graph_index, self.graph)
 * 
 *     def _global_context(self, across_files : bool, inclusive, seen : set[Node]):             # <<<<<<<<<<<<<<
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative
 */

  /* 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_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("_global_context", __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;
}

/* "pytact/data_reader.pyx":895
 *             d = d.previous
 * 
 *     def global_context(self, across_files : bool = True, inclusive = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_10global_context(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_10Definition_9global_context, "All of the definitions in the global context when this definition was created.\n\n        Note that this does not include this definition itself, except when the definition is a inductive,\n        constructor or projection. Because those are mutually recursive objects, they reference themselves\n        and are therefore part of their own global context.\n\n        The resulting iterable is topologically sorted. That is, for any definition in the stream, any\n        definition reachable from the forward closure of the definition also exists in the remainder of the\n        stream. An exception to this rule are mutually recursive definitions, because no topological sort\n        is possible there (see also `clustered_global_context`).\n\n        Arguments:\n        * `across_files`: if `False`, outputs only the definitions from the local file, default `True`.\n        * `inclusive`: if `True`, outputs also itself, default `False`.\n        Note: if it is a self-recursive definition, the `inclusive` argument is ignored, and considered as `True`\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10Definition_10global_context = {"global_context", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_10global_context, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_10Definition_9global_context};
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_10global_context(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_across_files = 0;
  PyObject *__pyx_v_inclusive = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("global_context (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_inclusive,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_inclusive,0};
    #endif
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_True);
    values[1] = ((PyObject *)Py_False);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_across_files);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 895, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inclusive);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 895, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "global_context") < 0)) __PYX_ERR(0, 895, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_across_files = values[0];
    __pyx_v_inclusive = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("global_context", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 895, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition.global_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_9global_context(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self), __pyx_v_across_files, __pyx_v_inclusive);

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_9global_context(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_inclusive) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("global_context", 0);

  /* "pytact/data_reader.pyx":912
 *         Note: if it is a self-recursive definition, the `inclusive` argument is ignored, and considered as `True`
 *         """
 *         return self._global_context(             # <<<<<<<<<<<<<<
 *             across_files = across_files,
 *             inclusive = inclusive,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_global_context); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "pytact/data_reader.pyx":913
 *         """
 *         return self._global_context(
 *             across_files = across_files,             # <<<<<<<<<<<<<<
 *             inclusive = inclusive,
 *             seen = set(),
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_across_files, __pyx_v_across_files) < 0) __PYX_ERR(0, 913, __pyx_L1_error)

  /* "pytact/data_reader.pyx":914
 *         return self._global_context(
 *             across_files = across_files,
 *             inclusive = inclusive,             # <<<<<<<<<<<<<<
 *             seen = set(),
 *         )
 */
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_inclusive, __pyx_v_inclusive) < 0) __PYX_ERR(0, 913, __pyx_L1_error)
  __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seen, __pyx_t_3) < 0) __PYX_ERR(0, 913, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":912
 *         Note: if it is a self-recursive definition, the `inclusive` argument is ignored, and considered as `True`
 *         """
 *         return self._global_context(             # <<<<<<<<<<<<<<
 *             across_files = across_files,
 *             inclusive = inclusive,
 */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 912, __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;

  /* "pytact/data_reader.pyx":895
 *             d = d.previous
 * 
 *     def global_context(self, across_files : bool = True, inclusive = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.Definition.global_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":918
 *         )
 * 
 *     def clustered_global_context(self, across_files : bool = True, inclusive : bool = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created, clustered into
 *         mutually recursive cliques.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_12clustered_global_context(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_10Definition_11clustered_global_context, "All of the definitions in the global context when this definition was created, clustered into\n        mutually recursive cliques.\n\n        The resulting iterable is topologically sorted. That is, for any definition in the stream, any\n        definition reachable from the forward closure of the definition also exists in the remainder of the\n        stream.\n\n        Arguments:\n        * `across_files`: if `False`, outputs only the definitions from the local file, default `True`.\n        * `inclusive`: if `True`, outputs also the cluster of itself, default `False`.\n        Note: if it is a self-recursive definition, the `inclusive` argument is ignored, and considered as `True`.\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10Definition_12clustered_global_context = {"clustered_global_context", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_12clustered_global_context, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_10Definition_11clustered_global_context};
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_12clustered_global_context(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_across_files = 0;
  PyObject *__pyx_v_inclusive = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clustered_global_context (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_inclusive,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_inclusive,0};
    #endif
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_True);
    values[1] = ((PyObject *)Py_False);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_across_files);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 918, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_inclusive);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 918, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "clustered_global_context") < 0)) __PYX_ERR(0, 918, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_across_files = values[0];
    __pyx_v_inclusive = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clustered_global_context", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 918, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition.clustered_global_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_11clustered_global_context(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self), __pyx_v_across_files, __pyx_v_inclusive);

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_11clustered_global_context(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_inclusive) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("clustered_global_context", 0);

  /* "pytact/data_reader.pyx":931
 *         Note: if it is a self-recursive definition, the `inclusive` argument is ignored, and considered as `True`.
 *         """
 *         return self._group_by_clusters(self.global_context(             # <<<<<<<<<<<<<<
 *             across_files = across_files,
 *             inclusive = inclusive,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_group_by_clusters); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_global_context_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":932
 *         """
 *         return self._group_by_clusters(self.global_context(
 *             across_files = across_files,             # <<<<<<<<<<<<<<
 *             inclusive = inclusive,
 *         ))
 */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_across_files, __pyx_v_across_files) < 0) __PYX_ERR(0, 932, __pyx_L1_error)

  /* "pytact/data_reader.pyx":933
 *         return self._group_by_clusters(self.global_context(
 *             across_files = across_files,
 *             inclusive = inclusive,             # <<<<<<<<<<<<<<
 *         ))
 * 
 */
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inclusive, __pyx_v_inclusive) < 0) __PYX_ERR(0, 932, __pyx_L1_error)

  /* "pytact/data_reader.pyx":931
 *         Note: if it is a self-recursive definition, the `inclusive` argument is ignored, and considered as `True`.
 *         """
 *         return self._group_by_clusters(self.global_context(             # <<<<<<<<<<<<<<
 *             across_files = across_files,
 *             inclusive = inclusive,
 */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  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_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 931, __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;

  /* "pytact/data_reader.pyx":918
 *         )
 * 
 *     def clustered_global_context(self, across_files : bool = True, inclusive : bool = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created, clustered into
 *         mutually recursive cliques.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.Definition.clustered_global_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":936
 *         ))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def status(self) -> Original | Discharged | Substituted:
 *         """A definition is either
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_6status_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_6status_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_6status___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_6status___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  Definition::Status::Reader __pyx_v_status;
  Definition::Status::Substituted::Reader __pyx_v_substituted;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Definition::Status::Reader __pyx_t_1;
  bool __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  uint32_t __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  Definition::Status::Substituted::Reader __pyx_t_12;
  uint16_t __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":945
 *         When a definition is not original, we cross-reference to the definition that it was derived from.
 *         """
 *         status = self.reader.getStatus()             # <<<<<<<<<<<<<<
 *         if status.isOriginal():
 *             return Original()
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getStatus();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 945, __pyx_L1_error)
  }
  __pyx_v_status = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":946
 *         """
 *         status = self.reader.getStatus()
 *         if status.isOriginal():             # <<<<<<<<<<<<<<
 *             return Original()
 *         elif status.isDischarged():
 */
  try {
    __pyx_t_2 = __pyx_v_status.isOriginal();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 946, __pyx_L1_error)
  }
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":947
 *         status = self.reader.getStatus()
 *         if status.isOriginal():
 *             return Original()             # <<<<<<<<<<<<<<
 *         elif status.isDischarged():
 *             return Discharged(
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Original); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_6, };
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 947, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":946
 *         """
 *         status = self.reader.getStatus()
 *         if status.isOriginal():             # <<<<<<<<<<<<<<
 *             return Original()
 *         elif status.isDischarged():
 */
  }

  /* "pytact/data_reader.pyx":948
 *         if status.isOriginal():
 *             return Original()
 *         elif status.isDischarged():             # <<<<<<<<<<<<<<
 *             return Discharged(
 *                 cast(Definition, Node.init(self.graph, status.getDischarged(),
 */
  try {
    __pyx_t_2 = __pyx_v_status.isDischarged();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 948, __pyx_L1_error)
  }
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":949
 *             return Original()
 *         elif status.isDischarged():
 *             return Discharged(             # <<<<<<<<<<<<<<
 *                 cast(Definition, Node.init(self.graph, status.getDischarged(),
 *                                            self.graph_index).definition))
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Discharged); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 949, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);

    /* "pytact/data_reader.pyx":950
 *         elif status.isDischarged():
 *             return Discharged(
 *                 cast(Definition, Node.init(self.graph, status.getDischarged(),             # <<<<<<<<<<<<<<
 *                                            self.graph_index).definition))
 *         elif status.isSubstituted():
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_cast); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    try {
      __pyx_t_9 = __pyx_v_status.getDischarged();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 950, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":951
 *             return Discharged(
 *                 cast(Definition, Node.init(self.graph, status.getDischarged(),
 *                                            self.graph_index).definition))             # <<<<<<<<<<<<<<
 *         elif status.isSubstituted():
 *             substituted = status.getSubstituted()
 */
    __pyx_t_10 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_t_9, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_definition); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_10, ((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_t_11};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 950, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_t_8 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 949, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":948
 *         if status.isOriginal():
 *             return Original()
 *         elif status.isDischarged():             # <<<<<<<<<<<<<<
 *             return Discharged(
 *                 cast(Definition, Node.init(self.graph, status.getDischarged(),
 */
  }

  /* "pytact/data_reader.pyx":952
 *                 cast(Definition, Node.init(self.graph, status.getDischarged(),
 *                                            self.graph_index).definition))
 *         elif status.isSubstituted():             # <<<<<<<<<<<<<<
 *             substituted = status.getSubstituted()
 *             return Substituted(
 */
  try {
    __pyx_t_2 = __pyx_v_status.isSubstituted();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 952, __pyx_L1_error)
  }
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":953
 *                                            self.graph_index).definition))
 *         elif status.isSubstituted():
 *             substituted = status.getSubstituted()             # <<<<<<<<<<<<<<
 *             return Substituted(
 *                 cast(Definition,
 */
    try {
      __pyx_t_12 = __pyx_v_status.getSubstituted();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 953, __pyx_L1_error)
    }
    __pyx_v_substituted = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_12);

    /* "pytact/data_reader.pyx":954
 *         elif status.isSubstituted():
 *             substituted = status.getSubstituted()
 *             return Substituted(             # <<<<<<<<<<<<<<
 *                 cast(Definition,
 *                      Node.init(self.graph_index.local_to_global[self.graph][substituted.getDepIndex()],
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Substituted); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 954, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);

    /* "pytact/data_reader.pyx":955
 *             substituted = status.getSubstituted()
 *             return Substituted(
 *                 cast(Definition,             # <<<<<<<<<<<<<<
 *                      Node.init(self.graph_index.local_to_global[self.graph][substituted.getDepIndex()],
 *                                substituted.getNodeIndex(), self.graph_index).definition))
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_cast); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 955, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);

    /* "pytact/data_reader.pyx":956
 *             return Substituted(
 *                 cast(Definition,
 *                      Node.init(self.graph_index.local_to_global[self.graph][substituted.getDepIndex()],             # <<<<<<<<<<<<<<
 *                                substituted.getNodeIndex(), self.graph_index).definition))
 *         else: assert False
 */
    try {
      __pyx_t_13 = __pyx_v_substituted.getDepIndex();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 956, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":957
 *                 cast(Definition,
 *                      Node.init(self.graph_index.local_to_global[self.graph][substituted.getDepIndex()],
 *                                substituted.getNodeIndex(), self.graph_index).definition))             # <<<<<<<<<<<<<<
 *         else: assert False
 * 
 */
    try {
      __pyx_t_9 = __pyx_v_substituted.getNodeIndex();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 957, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":956
 *             return Substituted(
 *                 cast(Definition,
 *                      Node.init(self.graph_index.local_to_global[self.graph][substituted.getDepIndex()],             # <<<<<<<<<<<<<<
 *                                substituted.getNodeIndex(), self.graph_index).definition))
 *         else: assert False
 */
    __pyx_t_11 = __pyx_f_6pytact_11data_reader_4Node_init(((__pyx_v_self->graph_index->local_to_global[__pyx_v_self->graph])[__pyx_t_13]), __pyx_t_9, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 956, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);

    /* "pytact/data_reader.pyx":957
 *                 cast(Definition,
 *                      Node.init(self.graph_index.local_to_global[self.graph][substituted.getDepIndex()],
 *                                substituted.getNodeIndex(), self.graph_index).definition))             # <<<<<<<<<<<<<<
 *         else: assert False
 * 
 */
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_definition); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 957, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_11, ((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_t_10};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 955, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __pyx_t_8 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_7 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 954, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":952
 *                 cast(Definition, Node.init(self.graph, status.getDischarged(),
 *                                            self.graph_index).definition))
 *         elif status.isSubstituted():             # <<<<<<<<<<<<<<
 *             substituted = status.getSubstituted()
 *             return Substituted(
 */
  }

  /* "pytact/data_reader.pyx":958
 *                      Node.init(self.graph_index.local_to_global[self.graph][substituted.getDepIndex()],
 *                                substituted.getNodeIndex(), self.graph_index).definition))
 *         else: assert False             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
        __PYX_ERR(0, 958, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(0, 958, __pyx_L1_error)
    #endif
  }

  /* "pytact/data_reader.pyx":936
 *         ))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def status(self) -> Original | Discharged | Substituted:
 *         """A definition is either
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("pytact.data_reader.Definition.status.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":960
 *         else: assert False
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def kind(self) -> Union[Inductive, Constructor, Projection,
 *                             ManualConstant, TacticalConstant,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_4kind_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_4kind_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_4kind___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_4kind___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  Definition::Reader __pyx_v_kind;
  __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Definition::Reader __pyx_t_1;
  __pyx_t_6pytact_11data_reader_GraphId __pyx_t_2;
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_3;
  bool __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  uint32_t __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  int __pyx_t_13;
   ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":973
 *         The associated information is low-level. Prefer to use the properties `proof` and `cluster` to access them.
 *         """
 *         kind = self.reader             # <<<<<<<<<<<<<<
 *         graph = self.graph
 *         graph_index = self.graph_index
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_kind = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":974
 *         """
 *         kind = self.reader
 *         graph = self.graph             # <<<<<<<<<<<<<<
 *         graph_index = self.graph_index
 *         if kind.isInductive():
 */
  __pyx_t_2 = __pyx_v_self->graph;
  __pyx_v_graph = __pyx_t_2;

  /* "pytact/data_reader.pyx":975
 *         kind = self.reader
 *         graph = self.graph
 *         graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         if kind.isInductive():
 *             return Inductive(
 */
  __pyx_t_3 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_3;

  /* "pytact/data_reader.pyx":976
 *         graph = self.graph
 *         graph_index = self.graph_index
 *         if kind.isInductive():             # <<<<<<<<<<<<<<
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getInductive(),
 */
  try {
    __pyx_t_4 = __pyx_v_kind.isInductive();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 976, __pyx_L1_error)
  }
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":977
 *         graph_index = self.graph_index
 *         if kind.isInductive():
 *             return Inductive(             # <<<<<<<<<<<<<<
 *                 cast(Definition, Node.init(self.graph, kind.getInductive(),
 *                                            self.graph_index).definition))
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Inductive); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);

    /* "pytact/data_reader.pyx":978
 *         if kind.isInductive():
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getInductive(),             # <<<<<<<<<<<<<<
 *                                            self.graph_index).definition))
 *         elif kind.isConstructor():
 */
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_cast); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    try {
      __pyx_t_10 = __pyx_v_kind.getInductive();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 978, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":979
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getInductive(),
 *                                            self.graph_index).definition))             # <<<<<<<<<<<<<<
 *         elif kind.isConstructor():
 *             return Inductive(
 */
    __pyx_t_11 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_t_10, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_definition); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 979, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_11, ((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_t_12};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 2+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 978, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __pyx_t_9 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 977, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":976
 *         graph = self.graph
 *         graph_index = self.graph_index
 *         if kind.isInductive():             # <<<<<<<<<<<<<<
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getInductive(),
 */
  }

  /* "pytact/data_reader.pyx":980
 *                 cast(Definition, Node.init(self.graph, kind.getInductive(),
 *                                            self.graph_index).definition))
 *         elif kind.isConstructor():             # <<<<<<<<<<<<<<
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getConstructor(),
 */
  try {
    __pyx_t_4 = __pyx_v_kind.isConstructor();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 980, __pyx_L1_error)
  }
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":981
 *                                            self.graph_index).definition))
 *         elif kind.isConstructor():
 *             return Inductive(             # <<<<<<<<<<<<<<
 *                 cast(Definition, Node.init(self.graph, kind.getConstructor(),
 *                                            self.graph_index).definition))
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Inductive); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 981, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);

    /* "pytact/data_reader.pyx":982
 *         elif kind.isConstructor():
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getConstructor(),             # <<<<<<<<<<<<<<
 *                                            self.graph_index).definition))
 *         elif kind.isProjection():
 */
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_cast); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    try {
      __pyx_t_10 = __pyx_v_kind.getConstructor();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 982, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":983
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getConstructor(),
 *                                            self.graph_index).definition))             # <<<<<<<<<<<<<<
 *         elif kind.isProjection():
 *             return Projection(
 */
    __pyx_t_12 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_t_10, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_definition); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_12, ((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_t_11};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 2+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 982, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __pyx_t_9 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 981, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":980
 *                 cast(Definition, Node.init(self.graph, kind.getInductive(),
 *                                            self.graph_index).definition))
 *         elif kind.isConstructor():             # <<<<<<<<<<<<<<
 *             return Inductive(
 *                 cast(Definition, Node.init(self.graph, kind.getConstructor(),
 */
  }

  /* "pytact/data_reader.pyx":984
 *                 cast(Definition, Node.init(self.graph, kind.getConstructor(),
 *                                            self.graph_index).definition))
 *         elif kind.isProjection():             # <<<<<<<<<<<<<<
 *             return Projection(
 *                 cast(Definition, Node.init(self.graph, kind.getProjection(),
 */
  try {
    __pyx_t_4 = __pyx_v_kind.isProjection();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 984, __pyx_L1_error)
  }
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":985
 *                                            self.graph_index).definition))
 *         elif kind.isProjection():
 *             return Projection(             # <<<<<<<<<<<<<<
 *                 cast(Definition, Node.init(self.graph, kind.getProjection(),
 *                                            self.graph_index).definition))
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Projection); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 985, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);

    /* "pytact/data_reader.pyx":986
 *         elif kind.isProjection():
 *             return Projection(
 *                 cast(Definition, Node.init(self.graph, kind.getProjection(),             # <<<<<<<<<<<<<<
 *                                            self.graph_index).definition))
 *         elif kind.isManualConstant():
 */
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_cast); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 986, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    try {
      __pyx_t_10 = __pyx_v_kind.getProjection();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 986, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":987
 *             return Projection(
 *                 cast(Definition, Node.init(self.graph, kind.getProjection(),
 *                                            self.graph_index).definition))             # <<<<<<<<<<<<<<
 *         elif kind.isManualConstant():
 *             return ManualConstant()
 */
    __pyx_t_11 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_t_10, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 986, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_definition); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 987, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_11, ((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_t_12};
      __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_13, 2+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 986, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __pyx_t_9 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":984
 *                 cast(Definition, Node.init(self.graph, kind.getConstructor(),
 *                                            self.graph_index).definition))
 *         elif kind.isProjection():             # <<<<<<<<<<<<<<
 *             return Projection(
 *                 cast(Definition, Node.init(self.graph, kind.getProjection(),
 */
  }

  /* "pytact/data_reader.pyx":988
 *                 cast(Definition, Node.init(self.graph, kind.getProjection(),
 *                                            self.graph_index).definition))
 *         elif kind.isManualConstant():             # <<<<<<<<<<<<<<
 *             return ManualConstant()
 *         elif kind.isTacticalConstant():
 */
  try {
    __pyx_t_4 = __pyx_v_kind.isManualConstant();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 988, __pyx_L1_error)
  }
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":989
 *                                            self.graph_index).definition))
 *         elif kind.isManualConstant():
 *             return ManualConstant()             # <<<<<<<<<<<<<<
 *         elif kind.isTacticalConstant():
 *             return TacticalConstant(ProofStep_List.init(kind.getTacticalConstant(), graph_index, graph))
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_ManualConstant); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_8, };
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 0+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 989, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":988
 *                 cast(Definition, Node.init(self.graph, kind.getProjection(),
 *                                            self.graph_index).definition))
 *         elif kind.isManualConstant():             # <<<<<<<<<<<<<<
 *             return ManualConstant()
 *         elif kind.isTacticalConstant():
 */
  }

  /* "pytact/data_reader.pyx":990
 *         elif kind.isManualConstant():
 *             return ManualConstant()
 *         elif kind.isTacticalConstant():             # <<<<<<<<<<<<<<
 *             return TacticalConstant(ProofStep_List.init(kind.getTacticalConstant(), graph_index, graph))
 *         elif kind.isManualSectionConstant():
 */
  try {
    __pyx_t_4 = __pyx_v_kind.isTacticalConstant();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 990, __pyx_L1_error)
  }
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":991
 *             return ManualConstant()
 *         elif kind.isTacticalConstant():
 *             return TacticalConstant(ProofStep_List.init(kind.getTacticalConstant(), graph_index, graph))             # <<<<<<<<<<<<<<
 *         elif kind.isManualSectionConstant():
 *             return ManualConstant()
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TacticalConstant); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 991, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    try {
      __pyx_t_14 = __pyx_v_kind.getTacticalConstant();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 991, __pyx_L1_error)
    }
    __pyx_t_8 = __pyx_f_6pytact_11data_reader_14ProofStep_List_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_14), __pyx_v_graph_index, __pyx_v_graph); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 991, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 991, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":990
 *         elif kind.isManualConstant():
 *             return ManualConstant()
 *         elif kind.isTacticalConstant():             # <<<<<<<<<<<<<<
 *             return TacticalConstant(ProofStep_List.init(kind.getTacticalConstant(), graph_index, graph))
 *         elif kind.isManualSectionConstant():
 */
  }

  /* "pytact/data_reader.pyx":992
 *         elif kind.isTacticalConstant():
 *             return TacticalConstant(ProofStep_List.init(kind.getTacticalConstant(), graph_index, graph))
 *         elif kind.isManualSectionConstant():             # <<<<<<<<<<<<<<
 *             return ManualConstant()
 *         elif kind.isTacticalSectionConstant():
 */
  try {
    __pyx_t_4 = __pyx_v_kind.isManualSectionConstant();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 992, __pyx_L1_error)
  }
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":993
 *             return TacticalConstant(ProofStep_List.init(kind.getTacticalConstant(), graph_index, graph))
 *         elif kind.isManualSectionConstant():
 *             return ManualConstant()             # <<<<<<<<<<<<<<
 *         elif kind.isTacticalSectionConstant():
 *             return TacticalSectionConstant(ProofStep_List.init(kind.getTacticalSectionConstant(), graph_index, graph))
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_ManualConstant); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 993, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_8, };
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 0+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 993, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":992
 *         elif kind.isTacticalConstant():
 *             return TacticalConstant(ProofStep_List.init(kind.getTacticalConstant(), graph_index, graph))
 *         elif kind.isManualSectionConstant():             # <<<<<<<<<<<<<<
 *             return ManualConstant()
 *         elif kind.isTacticalSectionConstant():
 */
  }

  /* "pytact/data_reader.pyx":994
 *         elif kind.isManualSectionConstant():
 *             return ManualConstant()
 *         elif kind.isTacticalSectionConstant():             # <<<<<<<<<<<<<<
 *             return TacticalSectionConstant(ProofStep_List.init(kind.getTacticalSectionConstant(), graph_index, graph))
 *         else: assert False
 */
  try {
    __pyx_t_4 = __pyx_v_kind.isTacticalSectionConstant();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 994, __pyx_L1_error)
  }
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":995
 *             return ManualConstant()
 *         elif kind.isTacticalSectionConstant():
 *             return TacticalSectionConstant(ProofStep_List.init(kind.getTacticalSectionConstant(), graph_index, graph))             # <<<<<<<<<<<<<<
 *         else: assert False
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_TacticalSectionConstant); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    try {
      __pyx_t_14 = __pyx_v_kind.getTacticalSectionConstant();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 995, __pyx_L1_error)
    }
    __pyx_t_8 = __pyx_f_6pytact_11data_reader_14ProofStep_List_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_14), __pyx_v_graph_index, __pyx_v_graph); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = NULL;
    __pyx_t_13 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_13 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_8};
      __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_13, 1+__pyx_t_13);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":994
 *         elif kind.isManualSectionConstant():
 *             return ManualConstant()
 *         elif kind.isTacticalSectionConstant():             # <<<<<<<<<<<<<<
 *             return TacticalSectionConstant(ProofStep_List.init(kind.getTacticalSectionConstant(), graph_index, graph))
 *         else: assert False
 */
  }

  /* "pytact/data_reader.pyx":996
 *         elif kind.isTacticalSectionConstant():
 *             return TacticalSectionConstant(ProofStep_List.init(kind.getTacticalSectionConstant(), graph_index, graph))
 *         else: assert False             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
        __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
        __PYX_ERR(0, 996, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(0, 996, __pyx_L1_error)
    #endif
  }

  /* "pytact/data_reader.pyx":960
 *         else: assert False
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def kind(self) -> Union[Inductive, Constructor, Projection,
 *                             ManualConstant, TacticalConstant,
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("pytact.data_reader.Definition.kind.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":998
 *         else: assert False
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def proof(self) -> Sequence[ProofStep] | None:
 *         """An optional tactical proof that was used to create this definition."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_5proof_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_5proof_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_5proof___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_5proof___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_v_kind = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1001
 *     def proof(self) -> Sequence[ProofStep] | None:
 *         """An optional tactical proof that was used to create this definition."""
 *         kind = self.kind             # <<<<<<<<<<<<<<
 *         if isinstance(kind, (TacticalConstant, TacticalSectionConstant)):
 *             return kind.proof
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1001, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_kind = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1002
 *         """An optional tactical proof that was used to create this definition."""
 *         kind = self.kind
 *         if isinstance(kind, (TacticalConstant, TacticalSectionConstant)):             # <<<<<<<<<<<<<<
 *             return kind.proof
 *         else: return None
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_TacticalConstant); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_TacticalSectionConstant); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_IsInstance(__pyx_v_kind, __pyx_t_1); 
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = PyObject_IsInstance(__pyx_v_kind, __pyx_t_2); 
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":1003
 *         kind = self.kind
 *         if isinstance(kind, (TacticalConstant, TacticalSectionConstant)):
 *             return kind.proof             # <<<<<<<<<<<<<<
 *         else: return None
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_kind, __pyx_n_s_proof); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1003, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1002
 *         """An optional tactical proof that was used to create this definition."""
 *         kind = self.kind
 *         if isinstance(kind, (TacticalConstant, TacticalSectionConstant)):             # <<<<<<<<<<<<<<
 *             return kind.proof
 *         else: return None
 */
  }

  /* "pytact/data_reader.pyx":1004
 *         if isinstance(kind, (TacticalConstant, TacticalSectionConstant)):
 *             return kind.proof
 *         else: return None             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":998
 *         else: assert False
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def proof(self) -> Sequence[ProofStep] | None:
 *         """An optional tactical proof that was used to create this definition."""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Definition.proof.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1006
 *         else: return None
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster_representative(self) -> Definition:
 *         """A unique representative of the mutually recursive cluster of definitions this definition is part of.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_22cluster_representative_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_22cluster_representative_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_22cluster_representative___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_22cluster_representative___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_v_kind = 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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1013
 *         This is a low-level property. Prefer to use the `cluster` property.
 *         """
 *         kind = self.kind             # <<<<<<<<<<<<<<
 *         if isinstance(kind, (Inductive, Constructor, Projection)):
 *             return kind.representative
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_kind = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1014
 *         """
 *         kind = self.kind
 *         if isinstance(kind, (Inductive, Constructor, Projection)):             # <<<<<<<<<<<<<<
 *             return kind.representative
 *         else: return self
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Inductive); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Constructor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Projection); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_kind, __pyx_t_1); 
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_kind, __pyx_t_2); 
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = PyObject_IsInstance(__pyx_v_kind, __pyx_t_3); 
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {

    /* "pytact/data_reader.pyx":1015
 *         kind = self.kind
 *         if isinstance(kind, (Inductive, Constructor, Projection)):
 *             return kind.representative             # <<<<<<<<<<<<<<
 *         else: return self
 * 
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_kind, __pyx_n_s_representative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1014
 *         """
 *         kind = self.kind
 *         if isinstance(kind, (Inductive, Constructor, Projection)):             # <<<<<<<<<<<<<<
 *             return kind.representative
 *         else: return self
 */
  }

  /* "pytact/data_reader.pyx":1016
 *         if isinstance(kind, (Inductive, Constructor, Projection)):
 *             return kind.representative
 *         else: return self             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_self);
    __pyx_r = ((PyObject *)__pyx_v_self);
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":1006
 *         else: return None
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster_representative(self) -> Definition:
 *         """A unique representative of the mutually recursive cluster of definitions this definition is part of.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.Definition.cluster_representative.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kind);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_10Definition_7cluster_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1018
 *         else: return self
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster(self) -> Iterable[Definition]:
 *         """The cluster of mutually recursive definitions that this definition is part of.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_7cluster_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_7cluster_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_7cluster___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_7cluster___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_3___get__(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1018, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__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_6pytact_11data_reader_10Definition_7cluster_2generator3, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_get, __pyx_n_s_Definition___get, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1018, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition.cluster.__get__", __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_6pytact_11data_reader_10Definition_7cluster_2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("cluster", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L6_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, 1018, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1022
 *         """The cluster of mutually recursive definitions that this definition is part of.
 *         If the definition is not mutually recursive, the cluster is a singleton."""
 *         representative = self.cluster_representative             # <<<<<<<<<<<<<<
 *         repr_node = representative.node
 *         current = representative
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_cluster_representative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_representative = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1023
 *         If the definition is not mutually recursive, the cluster is a singleton."""
 *         representative = self.cluster_representative
 *         repr_node = representative.node             # <<<<<<<<<<<<<<
 *         current = representative
 *         while True:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_representative, __pyx_n_s_node_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_repr_node = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1024
 *         representative = self.cluster_representative
 *         repr_node = representative.node
 *         current = representative             # <<<<<<<<<<<<<<
 *         while True:
 *             yield current
 */
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_representative);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_representative);
  __pyx_cur_scope->__pyx_v_current = __pyx_cur_scope->__pyx_v_representative;

  /* "pytact/data_reader.pyx":1025
 *         repr_node = representative.node
 *         current = representative
 *         while True:             # <<<<<<<<<<<<<<
 *             yield current
 *             current = current.previous
 */
  while (1) {

    /* "pytact/data_reader.pyx":1026
 *         current = representative
 *         while True:
 *             yield current             # <<<<<<<<<<<<<<
 *             current = current.previous
 *             if not current:
 */
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_current);
    __pyx_r = __pyx_cur_scope->__pyx_v_current;
    __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_L6_resume_from_yield:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1026, __pyx_L1_error)

    /* "pytact/data_reader.pyx":1027
 *         while True:
 *             yield current
 *             current = current.previous             # <<<<<<<<<<<<<<
 *             if not current:
 *                 break
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_current, __pyx_n_s_previous); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1027, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_current);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_current, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":1028
 *             yield current
 *             current = current.previous
 *             if not current:             # <<<<<<<<<<<<<<
 *                 break
 *             if current.cluster_representative.node != repr_node:
 */
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_current); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1028, __pyx_L1_error)
    __pyx_t_3 = (!__pyx_t_2);
    if (__pyx_t_3) {

      /* "pytact/data_reader.pyx":1029
 *             current = current.previous
 *             if not current:
 *                 break             # <<<<<<<<<<<<<<
 *             if current.cluster_representative.node != repr_node:
 *                 break
 */
      goto __pyx_L5_break;

      /* "pytact/data_reader.pyx":1028
 *             yield current
 *             current = current.previous
 *             if not current:             # <<<<<<<<<<<<<<
 *                 break
 *             if current.cluster_representative.node != repr_node:
 */
    }

    /* "pytact/data_reader.pyx":1030
 *             if not current:
 *                 break
 *             if current.cluster_representative.node != repr_node:             # <<<<<<<<<<<<<<
 *                 break
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_current, __pyx_n_s_cluster_representative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_node_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_cur_scope->__pyx_v_repr_node, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1030, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_3) {

      /* "pytact/data_reader.pyx":1031
 *                 break
 *             if current.cluster_representative.node != repr_node:
 *                 break             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
      goto __pyx_L5_break;

      /* "pytact/data_reader.pyx":1030
 *             if not current:
 *                 break
 *             if current.cluster_representative.node != repr_node:             # <<<<<<<<<<<<<<
 *                 break
 * 
 */
    }
  }
  __pyx_L5_break:;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1018
 *         else: return self
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster(self) -> Iterable[Definition]:
 *         """The cluster of mutually recursive definitions that this definition is part of.
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cluster", __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;
}

/* "pytact/data_reader.pyx":1033
 *                 break
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def type_text(self) -> str:
 *         """A textual representation of the type of this definition."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_9type_text_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_9type_text_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_9type_text___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_9type_text___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::kj::StringPtr __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1036
 *     def type_text(self) -> str:
 *         """A textual representation of the type of this definition."""
 *         temp = self.reader.getTypeText()             # <<<<<<<<<<<<<<
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getTypeText();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1036, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":1037
 *         """A textual representation of the type of this definition."""
 *         temp = self.reader.getTypeText()
 *         return (<char*>temp.begin())[:temp.size()]             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1037, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1033
 *                 break
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def type_text(self) -> str:
 *         """A textual representation of the type of this definition."""
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Definition.type_text.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1039
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def term_text(self) -> str | None:
 *         """A textual representation of the body of this definition.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_9term_text_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_9term_text_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_9term_text___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_9term_text___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_v_text = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::kj::StringPtr __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1044
 *         For inductives, constructors, projections, section variables and axioms this is `None`.
 *         """
 *         temp = self.reader.getTermText()             # <<<<<<<<<<<<<<
 *         cdef str text = (<char*>temp.begin())[:temp.size()]
 *         if text == "":
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getTermText();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1044, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":1045
 *         """
 *         temp = self.reader.getTermText()
 *         cdef str text = (<char*>temp.begin())[:temp.size()]             # <<<<<<<<<<<<<<
 *         if text == "":
 *             return None
 */
  __pyx_t_2 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1045, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_text = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1046
 *         temp = self.reader.getTermText()
 *         cdef str text = (<char*>temp.begin())[:temp.size()]
 *         if text == "":             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_text, __pyx_kp_u__6, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1046, __pyx_L1_error)
  if (__pyx_t_3) {

    /* "pytact/data_reader.pyx":1047
 *         cdef str text = (<char*>temp.begin())[:temp.size()]
 *         if text == "":
 *             return None             # <<<<<<<<<<<<<<
 *         else:
 *             return text
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1046
 *         temp = self.reader.getTermText()
 *         cdef str text = (<char*>temp.begin())[:temp.size()]
 *         if text == "":             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  }

  /* "pytact/data_reader.pyx":1049
 *             return None
 *         else:
 *             return text             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_text);
    __pyx_r = __pyx_v_text;
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":1039
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def term_text(self) -> str | None:
 *         """A textual representation of the body of this definition.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Definition.term_text.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_text);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1051
 *             return text
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def is_file_representative(self) -> bool:
 *         """Returns true if this definition is the representative of the super-global context of it's file.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_22is_file_representative_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_22is_file_representative_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_22is_file_representative___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_22is_file_representative___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1055
 *         """Returns true if this definition is the representative of the super-global context of it's file.
 *         Se also `Dataset.representative`."""
 *         return self.graph_index.representatives[self.graph] == self.node.nodeid             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(((__pyx_v_self->graph_index->representatives[__pyx_v_self->graph]) == __pyx_v_self->node->nodeid)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1051
 *             return text
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def is_file_representative(self) -> bool:
 *         """Returns true if this definition is the representative of the super-global context of it's file.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Definition.is_file_representative.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_10Definition_15generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1057
 *         return self.graph_index.representatives[self.graph] == self.node.nodeid
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def _group_by_clusters(cls, definitions : Iterable[Definition]) -> Iterable[list[Definition]]:
 *         definitions_it = iter(definitions)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_14_group_by_clusters(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10Definition_14_group_by_clusters = {"_group_by_clusters", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_14_group_by_clusters, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_14_group_by_clusters(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_definitions = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_group_by_clusters (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_definitions,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_definitions,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_definitions)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1057, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_group_by_clusters") < 0)) __PYX_ERR(0, 1057, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_definitions = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_group_by_clusters", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1057, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition._group_by_clusters", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_13_group_by_clusters(((PyTypeObject*)__pyx_v_cls), __pyx_v_definitions);

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_13_group_by_clusters(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_definitions) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_group_by_clusters", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1057, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_cls = __pyx_v_cls;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_cls);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_cls);
  __pyx_cur_scope->__pyx_v_definitions = __pyx_v_definitions;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_definitions);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_definitions);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_10Definition_15generator4, __pyx_codeobj__13, (PyObject *) __pyx_cur_scope, __pyx_n_s_group_by_clusters, __pyx_n_s_Definition__group_by_clusters, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1057, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition._group_by_clusters", __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_6pytact_11data_reader_10Definition_15generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  int __pyx_t_9;
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_group_by_clusters", 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, 1057, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1059
 *     @classmethod
 *     def _group_by_clusters(cls, definitions : Iterable[Definition]) -> Iterable[list[Definition]]:
 *         definitions_it = iter(definitions)             # <<<<<<<<<<<<<<
 *         while True:
 *             try:
 */
  __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_definitions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_cur_scope->__pyx_v_definitions_it = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1060
 *     def _group_by_clusters(cls, definitions : Iterable[Definition]) -> Iterable[list[Definition]]:
 *         definitions_it = iter(definitions)
 *         while True:             # <<<<<<<<<<<<<<
 *             try:
 *                 node = next(definitions_it)
 */
  while (1) {

    /* "pytact/data_reader.pyx":1061
 *         definitions_it = iter(definitions)
 *         while True:
 *             try:             # <<<<<<<<<<<<<<
 *                 node = next(definitions_it)
 *             except StopIteration:
 */
    {
      __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_4);
      /*try:*/ {

        /* "pytact/data_reader.pyx":1062
 *         while True:
 *             try:
 *                 node = next(definitions_it)             # <<<<<<<<<<<<<<
 *             except StopIteration:
 *                 return
 */
        __pyx_t_1 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_definitions_it); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_node);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_node, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __pyx_t_1 = 0;

        /* "pytact/data_reader.pyx":1061
 *         definitions_it = iter(definitions)
 *         while True:
 *             try:             # <<<<<<<<<<<<<<
 *                 node = next(definitions_it)
 *             except StopIteration:
 */
      }
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      goto __pyx_L13_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "pytact/data_reader.pyx":1063
 *             try:
 *                 node = next(definitions_it)
 *             except StopIteration:             # <<<<<<<<<<<<<<
 *                 return
 *             rep = node.cluster_representative
 */
      __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
      if (__pyx_t_5) {
        __Pyx_AddTraceback("pytact.data_reader.Definition._group_by_clusters", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 1063, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GOTREF(__pyx_t_7);

        /* "pytact/data_reader.pyx":1064
 *                 node = next(definitions_it)
 *             except StopIteration:
 *                 return             # <<<<<<<<<<<<<<
 *             rep = node.cluster_representative
 *             n = rep
 */
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = NULL;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L9_except_return;
      }
      goto __pyx_L8_except_error;
      __pyx_L8_except_error:;

      /* "pytact/data_reader.pyx":1061
 *         definitions_it = iter(definitions)
 *         while True:
 *             try:             # <<<<<<<<<<<<<<
 *                 node = next(definitions_it)
 *             except StopIteration:
 */
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
      goto __pyx_L1_error;
      __pyx_L9_except_return:;
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
      goto __pyx_L0;
      __pyx_L13_try_end:;
    }

    /* "pytact/data_reader.pyx":1065
 *             except StopIteration:
 *                 return
 *             rep = node.cluster_representative             # <<<<<<<<<<<<<<
 *             n = rep
 *             cluster = [n]
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_node, __pyx_n_s_cluster_representative); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_rep);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_rep, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_7);
    __pyx_t_7 = 0;

    /* "pytact/data_reader.pyx":1066
 *                 return
 *             rep = node.cluster_representative
 *             n = rep             # <<<<<<<<<<<<<<
 *             cluster = [n]
 *             while n.previous and n.previous.cluster_representative == rep:
 */
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_rep);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_n);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_n, __pyx_cur_scope->__pyx_v_rep);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_rep);

    /* "pytact/data_reader.pyx":1067
 *             rep = node.cluster_representative
 *             n = rep
 *             cluster = [n]             # <<<<<<<<<<<<<<
 *             while n.previous and n.previous.cluster_representative == rep:
 *                 n = n.previous
 */
    __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_n);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_n);
    PyList_SET_ITEM(__pyx_t_7, 0, __pyx_cur_scope->__pyx_v_n);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_cluster);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cluster, ((PyObject*)__pyx_t_7));
    __Pyx_GIVEREF(__pyx_t_7);
    __pyx_t_7 = 0;

    /* "pytact/data_reader.pyx":1068
 *             n = rep
 *             cluster = [n]
 *             while n.previous and n.previous.cluster_representative == rep:             # <<<<<<<<<<<<<<
 *                 n = n.previous
 *                 cluster.append(n)
 */
    while (1) {
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_n, __pyx_n_s_previous); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1068, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1068, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (__pyx_t_9) {
      } else {
        __pyx_t_8 = __pyx_t_9;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_n, __pyx_n_s_previous); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1068, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_cluster_representative); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1068, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyObject_RichCompare(__pyx_t_6, __pyx_cur_scope->__pyx_v_rep, Py_EQ); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1068, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1068, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = __pyx_t_9;
      __pyx_L18_bool_binop_done:;
      if (!__pyx_t_8) break;

      /* "pytact/data_reader.pyx":1069
 *             cluster = [n]
 *             while n.previous and n.previous.cluster_representative == rep:
 *                 n = n.previous             # <<<<<<<<<<<<<<
 *                 cluster.append(n)
 *                 next(definitions_it)
 */
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_n, __pyx_n_s_previous); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1069, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_n);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_n, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_7);
      __pyx_t_7 = 0;

      /* "pytact/data_reader.pyx":1070
 *             while n.previous and n.previous.cluster_representative == rep:
 *                 n = n.previous
 *                 cluster.append(n)             # <<<<<<<<<<<<<<
 *                 next(definitions_it)
 *             yield cluster
 */
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_cluster, __pyx_cur_scope->__pyx_v_n); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1070, __pyx_L1_error)

      /* "pytact/data_reader.pyx":1071
 *                 n = n.previous
 *                 cluster.append(n)
 *                 next(definitions_it)             # <<<<<<<<<<<<<<
 *             yield cluster
 * 
 */
      __pyx_t_7 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_definitions_it); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1071, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }

    /* "pytact/data_reader.pyx":1072
 *                 cluster.append(n)
 *                 next(definitions_it)
 *             yield cluster             # <<<<<<<<<<<<<<
 * 
 * cdef class Dataset_Definition_List:
 */
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_cluster);
    __pyx_r = __pyx_cur_scope->__pyx_v_cluster;
    __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:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1072, __pyx_L1_error)
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1057
 *         return self.graph_index.representatives[self.graph] == self.node.nodeid
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def _group_by_clusters(cls, definitions : Iterable[Definition]) -> Iterable[list[Definition]]:
 *         definitions_it = iter(definitions)
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("_group_by_clusters", __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;
}

/* "pytact/data_reader.pyx":809
 *     cdef GraphId graph
 *     cdef GraphIndex *graph_index
 *     cdef readonly Node node             # <<<<<<<<<<<<<<
 *     """The node that is associated with this definition. It holds that `definition.node.definition == definition`.
 *     """
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_4node_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_4node_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_4node___get__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_4node___get__(struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self->node);
  __pyx_r = ((PyObject *)__pyx_v_self->node);
  goto __pyx_L0;

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_17__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10Definition_17__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_17__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_17__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_16__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_16__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_19__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_10Definition_19__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_19__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_10Definition_19__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10Definition_18__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Definition *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_10Definition_18__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Definition.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1080
 * 
 *     @staticmethod
 *     cdef init(C_Uint32_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Dataset_Definition_List wrapper = Dataset_Definition_List.__new__(Dataset_Definition_List)
 *         wrapper.reader = reader
 */

static PyObject *__pyx_f_6pytact_11data_reader_23Dataset_Definition_List_init( ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_v_reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph) {
  struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":1081
 *     @staticmethod
 *     cdef init(C_Uint32_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Dataset_Definition_List wrapper = Dataset_Definition_List.__new__(Dataset_Definition_List)             # <<<<<<<<<<<<<<
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Dataset_Definition_List(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1081, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1082
 *     cdef init(C_Uint32_List reader, GraphIndex *graph_index, GraphId graph):
 *         cdef Dataset_Definition_List wrapper = Dataset_Definition_List.__new__(Dataset_Definition_List)
 *         wrapper.reader = reader             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 */
  __pyx_v_wrapper->reader = __pyx_v_reader;

  /* "pytact/data_reader.pyx":1083
 *         cdef Dataset_Definition_List wrapper = Dataset_Definition_List.__new__(Dataset_Definition_List)
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         return wrapper
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":1084
 *         wrapper.reader = reader
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":1085
 *         wrapper.graph_index = graph_index
 *         wrapper.graph = graph
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, uint index) -> Definition:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1080
 * 
 *     @staticmethod
 *     cdef init(C_Uint32_List reader, GraphIndex *graph_index, GraphId graph):             # <<<<<<<<<<<<<<
 *         cdef Dataset_Definition_List wrapper = Dataset_Definition_List.__new__(Dataset_Definition_List)
 *         wrapper.reader = reader
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Dataset_Definition_List.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1087
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Definition:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_1__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_arg_index) {
  __pyx_t_5capnp_8includes_5types_uint __pyx_v_index;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  assert(__pyx_arg_index); {
    __pyx_v_index = __Pyx_PyInt_As_unsigned_int(__pyx_arg_index); if (unlikely((__pyx_v_index == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1087, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset_Definition_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23Dataset_Definition_List___getitem__(((struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *)__pyx_v_self), ((__pyx_t_5capnp_8includes_5types_uint)__pyx_v_index));

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

static PyObject *__pyx_pf_6pytact_11data_reader_23Dataset_Definition_List___getitem__(struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_self, __pyx_t_5capnp_8includes_5types_uint __pyx_v_index) {
   ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_v_reader;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  uint32_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "pytact/data_reader.pyx":1088
 * 
 *     def __getitem__(self, uint index) -> Definition:
 *         reader = self.reader             # <<<<<<<<<<<<<<
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 */
  __pyx_t_1 = __pyx_v_self->reader;
  __pyx_v_reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":1089
 *     def __getitem__(self, uint index) -> Definition:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return cast(Definition, Node.init(self.graph, reader[index], self.graph_index).definition)
 */
  __pyx_t_2 = (__pyx_v_index >= __pyx_v_reader.size());
  if (unlikely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":1090
 *         reader = self.reader
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         return cast(Definition, Node.init(self.graph, reader[index], self.graph_index).definition)
 * 
 */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1090, __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, 1090, __pyx_L1_error)

    /* "pytact/data_reader.pyx":1089
 *     def __getitem__(self, uint index) -> Definition:
 *         reader = self.reader
 *         if index >= reader.size():             # <<<<<<<<<<<<<<
 *             raise IndexError('Out of bounds')
 *         return cast(Definition, Node.init(self.graph, reader[index], self.graph_index).definition)
 */
  }

  /* "pytact/data_reader.pyx":1091
 *         if index >= reader.size():
 *             raise IndexError('Out of bounds')
 *         return cast(Definition, Node.init(self.graph, reader[index], self.graph_index).definition)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_cast); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  try {
    __pyx_t_5 = __pyx_v_reader[__pyx_v_index];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1091, __pyx_L1_error)
  }
  __pyx_t_6 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_t_5, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_definition); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1091, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_8 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_6, ((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_t_7};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1091, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1087
 *         return wrapper
 * 
 *     def __getitem__(self, uint index) -> Definition:             # <<<<<<<<<<<<<<
 *         reader = self.reader
 *         if index >= reader.size():
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pytact.data_reader.Dataset_Definition_List.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1093
 *         return cast(Definition, Node.init(self.graph, reader[index], self.graph_index).definition)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

/* Python wrapper */
static Py_ssize_t __pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_3__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_3__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_2__len__(((struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *)__pyx_v_self));

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

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

  /* "pytact/data_reader.pyx":1094
 * 
 *     def __len__(self):
 *         return self.reader.size()             # <<<<<<<<<<<<<<
 * 
 * cdef class Dataset:
 */
  __pyx_r = __pyx_v_self->reader.size();
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1093
 *         return cast(Definition, Node.init(self.graph, reader[index], self.graph_index).definition)
 * 
 *     def __len__(self):             # <<<<<<<<<<<<<<
 *         return self.reader.size()
 * 
 */

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_23Dataset_Definition_List_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_4__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset_Definition_List.__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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_23Dataset_Definition_List_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset_Definition_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_6__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_23Dataset_Definition_List_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset_Definition_List.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1108
 * 
 *     @staticmethod
 *     cdef init(filename: Path, GraphId graph, LowlevelDataReader lreader):             # <<<<<<<<<<<<<<
 *         cdef Dataset wrapper = Dataset.__new__(Dataset)
 *         wrapper.filename = filename
 */

static PyObject *__pyx_f_6pytact_11data_reader_7Dataset_init(PyObject *__pyx_v_filename, __pyx_t_6pytact_11data_reader_GraphId __pyx_v_graph, struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_lreader) {
  struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Dataset::Reader __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":1109
 *     @staticmethod
 *     cdef init(filename: Path, GraphId graph, LowlevelDataReader lreader):
 *         cdef Dataset wrapper = Dataset.__new__(Dataset)             # <<<<<<<<<<<<<<
 *         wrapper.filename = filename
 *         wrapper.graph = graph
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_Dataset(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_Dataset), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1110
 *     cdef init(filename: Path, GraphId graph, LowlevelDataReader lreader):
 *         cdef Dataset wrapper = Dataset.__new__(Dataset)
 *         wrapper.filename = filename             # <<<<<<<<<<<<<<
 *         wrapper.graph = graph
 *         wrapper.reader = (<Dataset_Reader> lreader.graphs[graph]).source
 */
  __Pyx_INCREF(__pyx_v_filename);
  __Pyx_GIVEREF(__pyx_v_filename);
  __Pyx_GOTREF(__pyx_v_wrapper->filename);
  __Pyx_DECREF(__pyx_v_wrapper->filename);
  __pyx_v_wrapper->filename = __pyx_v_filename;

  /* "pytact/data_reader.pyx":1111
 *         cdef Dataset wrapper = Dataset.__new__(Dataset)
 *         wrapper.filename = filename
 *         wrapper.graph = graph             # <<<<<<<<<<<<<<
 *         wrapper.reader = (<Dataset_Reader> lreader.graphs[graph]).source
 *         wrapper.graph_index = &lreader.graph_index
 */
  __pyx_v_wrapper->graph = __pyx_v_graph;

  /* "pytact/data_reader.pyx":1112
 *         wrapper.filename = filename
 *         wrapper.graph = graph
 *         wrapper.reader = (<Dataset_Reader> lreader.graphs[graph]).source             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = &lreader.graph_index
 *         return wrapper
 */
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_lreader->graphs, __pyx_v_graph, __pyx_t_6pytact_11data_reader_GraphId, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((struct __pyx_obj_6pytact_22graph_api_capnp_cython_Dataset_Reader *)__pyx_t_1)->source;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_wrapper->reader = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_2);

  /* "pytact/data_reader.pyx":1113
 *         wrapper.graph = graph
 *         wrapper.reader = (<Dataset_Reader> lreader.graphs[graph]).source
 *         wrapper.graph_index = &lreader.graph_index             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph_index = (&__pyx_v_lreader->graph_index);

  /* "pytact/data_reader.pyx":1114
 *         wrapper.reader = (<Dataset_Reader> lreader.graphs[graph]).source
 *         wrapper.graph_index = &lreader.graph_index
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1108
 * 
 *     @staticmethod
 *     cdef init(filename: Path, GraphId graph, LowlevelDataReader lreader):             # <<<<<<<<<<<<<<
 *         cdef Dataset wrapper = Dataset.__new__(Dataset)
 *         wrapper.filename = filename
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1116
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return Dataset_Reader.init(self.reader, None)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_8lowlevel_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_8lowlevel_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_8lowlevel___get__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_8lowlevel___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1118
 *     @property
 *     def lowlevel(self):
 *         return Dataset_Reader.init(self.reader, None)             # <<<<<<<<<<<<<<
 *     def __repr__(self):
 *         return repr(self.lowlevel)
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Dataset_Reader->init(__pyx_v_self->reader, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1116
 *         return wrapper
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def lowlevel(self):
 *         return Dataset_Reader.init(self.reader, None)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.lowlevel.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1119
 *     def lowlevel(self):
 *         return Dataset_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_1__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_1__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset___repr__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset___repr__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "pytact/data_reader.pyx":1120
 *         return Dataset_Reader.init(self.reader, None)
 *     def __repr__(self):
 *         return repr(self.lowlevel)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_lowlevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1120, __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;

  /* "pytact/data_reader.pyx":1119
 *     def lowlevel(self):
 *         return Dataset_Reader.init(self.reader, None)
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         return repr(self.lowlevel)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1122
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def dependencies(self) -> Sequence[Path]:
 *         """A list of physical paths of data files that are direct dependencies of this file.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_12dependencies_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_12dependencies_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_12dependencies___get__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

/* "pytact/data_reader.pyx":1131
 *         # The first dependency is the file itself, which we do not want to expose here.
 *         count = dependencies.size() - 1
 *         def get(index):             # <<<<<<<<<<<<<<
 *             temp = dependencies[index+1]
 *             return Path((<char*>temp.begin())[:temp.size()])
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_12dependencies_7__get___1get(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Dataset_12dependencies_7__get___1get = {"get", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_12dependencies_7__get___1get, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_12dependencies_7__get___1get(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_index)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1131, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "get") < 0)) __PYX_ERR(0, 1131, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_index = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1131, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset.dependencies.__get__.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_12dependencies_7__get___get(__pyx_self, __pyx_v_index);

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_12dependencies_7__get___get(PyObject *__pyx_self, PyObject *__pyx_v_index) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *__pyx_cur_scope;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *__pyx_outer_scope;
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __pyx_t_5capnp_8includes_5types_uint __pyx_t_2;
   ::kj::StringPtr __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;

  /* "pytact/data_reader.pyx":1132
 *         count = dependencies.size() - 1
 *         def get(index):
 *             temp = dependencies[index+1]             # <<<<<<<<<<<<<<
 *             return Path((<char*>temp.begin())[:temp.size()])
 *         return TupleLike(count, get)
 */
  __pyx_t_1 = __Pyx_PyInt_AddObjC(__pyx_v_index, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  try {
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_dependencies[__pyx_t_2];
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1132, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_3);

  /* "pytact/data_reader.pyx":1133
 *         def get(index):
 *             temp = dependencies[index+1]
 *             return Path((<char*>temp.begin())[:temp.size()])             # <<<<<<<<<<<<<<
 *         return TupleLike(count, get)
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1131
 *         # The first dependency is the file itself, which we do not want to expose here.
 *         count = dependencies.size() - 1
 *         def get(index):             # <<<<<<<<<<<<<<
 *             temp = dependencies[index+1]
 *             return Path((<char*>temp.begin())[:temp.size()])
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.dependencies.__get__.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1122
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def dependencies(self) -> Sequence[Path]:
 *         """A list of physical paths of data files that are direct dependencies of this file.
 */

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_12dependencies___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *__pyx_cur_scope;
  long __pyx_v_count;
  PyObject *__pyx_v_get = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::capnp::List<capnp::Text, ::capnp::Kind::BLOB>::Reader __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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_5___get__(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1122, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }

  /* "pytact/data_reader.pyx":1128
 *         It is guaranteed that no cycles exist in the dependency relation between files induced by this field.
 *         """
 *         dependencies = self.reader.getDependencies()             # <<<<<<<<<<<<<<
 *         # The first dependency is the file itself, which we do not want to expose here.
 *         count = dependencies.size() - 1
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getDependencies();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1128, __pyx_L1_error)
  }
  __pyx_cur_scope->__pyx_v_dependencies = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":1130
 *         dependencies = self.reader.getDependencies()
 *         # The first dependency is the file itself, which we do not want to expose here.
 *         count = dependencies.size() - 1             # <<<<<<<<<<<<<<
 *         def get(index):
 *             temp = dependencies[index+1]
 */
  __pyx_v_count = (__pyx_cur_scope->__pyx_v_dependencies.size() - 1);

  /* "pytact/data_reader.pyx":1131
 *         # The first dependency is the file itself, which we do not want to expose here.
 *         count = dependencies.size() - 1
 *         def get(index):             # <<<<<<<<<<<<<<
 *             temp = dependencies[index+1]
 *             return Path((<char*>temp.begin())[:temp.size()])
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Dataset_12dependencies_7__get___1get, 0, __pyx_n_s_Dataset___get___locals_get, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__15)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_get = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1134
 *             temp = dependencies[index+1]
 *             return Path((<char*>temp.begin())[:temp.size()])
 *         return TupleLike(count, get)             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_TupleLike); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_v_count); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_4, __pyx_v_get};
    __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1134, __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;

  /* "pytact/data_reader.pyx":1122
 *         return repr(self.lowlevel)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def dependencies(self) -> Sequence[Path]:
 *         """A list of physical paths of data files that are direct dependencies of this file.
 */

  /* 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("pytact.data_reader.Dataset.dependencies.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_get);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1136
 *         return TupleLike(count, get)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def representative(self) -> Definition | None:
 *         """The entry point of the global context of definitions that are available when this file is 'Required' by
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_14representative_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_14representative_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_14representative___get__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_14representative___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
  uint32_t __pyx_v_representative;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  uint32_t __pyx_t_1;
  Graph::Reader __pyx_t_2;
   ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1145
 *         Prefer to use `definitions(spine_only = True)` and `clustered_definitions(spine_only=True)`.
 *         """
 *         representative = self.reader.getRepresentative()             # <<<<<<<<<<<<<<
 *         if self.reader.getGraph().getNodes().size() == representative:
 *             return None
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getRepresentative();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1145, __pyx_L1_error)
  }
  __pyx_v_representative = __pyx_t_1;

  /* "pytact/data_reader.pyx":1146
 *         """
 *         representative = self.reader.getRepresentative()
 *         if self.reader.getGraph().getNodes().size() == representative:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  try {
    __pyx_t_2 = __pyx_v_self->reader.getGraph();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1146, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_t_2.getNodes();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1146, __pyx_L1_error)
  }
  __pyx_t_4 = (__pyx_t_3.size() == __pyx_v_representative);
  if (__pyx_t_4) {

    /* "pytact/data_reader.pyx":1147
 *         representative = self.reader.getRepresentative()
 *         if self.reader.getGraph().getNodes().size() == representative:
 *             return None             # <<<<<<<<<<<<<<
 *         else:
 *             return Node.init(self.graph, representative, self.graph_index).definition
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1146
 *         """
 *         representative = self.reader.getRepresentative()
 *         if self.reader.getGraph().getNodes().size() == representative:             # <<<<<<<<<<<<<<
 *             return None
 *         else:
 */
  }

  /* "pytact/data_reader.pyx":1149
 *             return None
 *         else:
 *             return Node.init(self.graph, representative, self.graph_index).definition             # <<<<<<<<<<<<<<
 * 
 *     def definitions(self, across_files = False, spine_only = False) -> Iterable[Definition]:
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_v_representative, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_definition); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":1136
 *         return TupleLike(count, get)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def representative(self) -> Definition | None:
 *         """The entry point of the global context of definitions that are available when this file is 'Required' by
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.representative.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1151
 *             return Node.init(self.graph, representative, self.graph_index).definition
 * 
 *     def definitions(self, across_files = False, spine_only = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_3definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_7Dataset_2definitions, "All of the definitions present in the file.\n        Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside\n        of sections or module functors.\n\n        Arguments:\n        * `across_files`: if `True`, outputs also definitions from dependent files, default `False`.\n        * `spine_only`: if True, outputs only the definitions on the main spine, default `False`.\n        Note: `across_files = True` is incompatible with `spine_only = False`.\n\n        When `spine_only = True`, the resulting iterable is topologically sorted. That is, for\n        any definition in the stream, any definition reachable from the forward closure of the definition\n        also exists in the remainder of the stream. An exception to this rule are mutually recursive definitions,\n        because no topological sort is possible there (see also `clustered_definitions`).\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Dataset_3definitions = {"definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_3definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_7Dataset_2definitions};
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_3definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_across_files = 0;
  PyObject *__pyx_v_spine_only = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("definitions (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_spine_only,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_spine_only,0};
    #endif
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_False);
    values[1] = ((PyObject *)Py_False);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_across_files);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1151, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_spine_only);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1151, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "definitions") < 0)) __PYX_ERR(0, 1151, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_across_files = values[0];
    __pyx_v_spine_only = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("definitions", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 1151, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset.definitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_2definitions(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self), __pyx_v_across_files, __pyx_v_spine_only);

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_2definitions(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_spine_only) {
  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;
   ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("definitions", 0);

  /* "pytact/data_reader.pyx":1166
 *         because no topological sort is possible there (see also `clustered_definitions`).
 *         """
 *         if across_files and not spine_only:             # <<<<<<<<<<<<<<
 *             raise Exception("Options across_files = True and spine_only = False are incompatible")
 *         if spine_only:
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_across_files); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1166, __pyx_L1_error)
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_spine_only); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1166, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "pytact/data_reader.pyx":1167
 *         """
 *         if across_files and not spine_only:
 *             raise Exception("Options across_files = True and spine_only = False are incompatible")             # <<<<<<<<<<<<<<
 *         if spine_only:
 *             if self.representative is None: return ()
 */
    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1167, __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, 1167, __pyx_L1_error)

    /* "pytact/data_reader.pyx":1166
 *         because no topological sort is possible there (see also `clustered_definitions`).
 *         """
 *         if across_files and not spine_only:             # <<<<<<<<<<<<<<
 *             raise Exception("Options across_files = True and spine_only = False are incompatible")
 *         if spine_only:
 */
  }

  /* "pytact/data_reader.pyx":1168
 *         if across_files and not spine_only:
 *             raise Exception("Options across_files = True and spine_only = False are incompatible")
 *         if spine_only:             # <<<<<<<<<<<<<<
 *             if self.representative is None: return ()
 *             return self.representative.global_context(
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_spine_only); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1168, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "pytact/data_reader.pyx":1169
 *             raise Exception("Options across_files = True and spine_only = False are incompatible")
 *         if spine_only:
 *             if self.representative is None: return ()             # <<<<<<<<<<<<<<
 *             return self.representative.global_context(
 *                 inclusive = True,
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_representative); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = (__pyx_t_4 == Py_None);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_1) {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_empty_tuple);
      __pyx_r = __pyx_empty_tuple;
      goto __pyx_L0;
    }

    /* "pytact/data_reader.pyx":1170
 *         if spine_only:
 *             if self.representative is None: return ()
 *             return self.representative.global_context(             # <<<<<<<<<<<<<<
 *                 inclusive = True,
 *                 across_files = across_files,
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_representative); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_global_context_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "pytact/data_reader.pyx":1171
 *             if self.representative is None: return ()
 *             return self.representative.global_context(
 *                 inclusive = True,             # <<<<<<<<<<<<<<
 *                 across_files = across_files,
 *             )
 */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_inclusive, Py_True) < 0) __PYX_ERR(0, 1171, __pyx_L1_error)

    /* "pytact/data_reader.pyx":1172
 *             return self.representative.global_context(
 *                 inclusive = True,
 *                 across_files = across_files,             # <<<<<<<<<<<<<<
 *             )
 *         else:
 */
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_across_files, __pyx_v_across_files) < 0) __PYX_ERR(0, 1171, __pyx_L1_error)

    /* "pytact/data_reader.pyx":1170
 *         if spine_only:
 *             if self.representative is None: return ()
 *             return self.representative.global_context(             # <<<<<<<<<<<<<<
 *                 inclusive = True,
 *                 across_files = across_files,
 */
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1168
 *         if across_files and not spine_only:
 *             raise Exception("Options across_files = True and spine_only = False are incompatible")
 *         if spine_only:             # <<<<<<<<<<<<<<
 *             if self.representative is None: return ()
 *             return self.representative.global_context(
 */
  }

  /* "pytact/data_reader.pyx":1175
 *             )
 *         else:
 *             return Dataset_Definition_List.init(self.reader.getDefinitions(), self.graph_index, self.graph)             # <<<<<<<<<<<<<<
 * 
 *     def clustered_definitions(self, across_files = False, spine_only = False) -> Iterable[list[Definition]]:
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    try {
      __pyx_t_7 = __pyx_v_self->reader.getDefinitions();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 1175, __pyx_L1_error)
    }
    __pyx_t_6 = __pyx_f_6pytact_11data_reader_23Dataset_Definition_List_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_7), __pyx_v_self->graph_index, __pyx_v_self->graph); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = __pyx_t_6;
    __pyx_t_6 = 0;
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":1151
 *             return Node.init(self.graph, representative, self.graph_index).definition
 * 
 *     def definitions(self, across_files = False, spine_only = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.definitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1177
 *             return Dataset_Definition_List.init(self.reader.getDefinitions(), self.graph_index, self.graph)
 * 
 *     def clustered_definitions(self, across_files = False, spine_only = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file, clustered by mutually recursive definitions.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_5clustered_definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_7Dataset_4clustered_definitions, "All of the definitions present in the file, clustered by mutually recursive definitions.\n        Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside\n        of sections or module functors.\n\n        Arguments:\n        * `across_files`: if `True`, outputs also definitions from dependent files, default `False`.\n        * `spine_only`: if `True`, outputs only the definitions on the main spine, default `False`.\n        Note: `across_files = True` is incompatible with `spine_only = False`.\n\n        When `spine_only = True`, the resulting iterable is topologically sorted. That is, for\n        any definition in the stream, any definition reachable from the forward closure of the definition\n        also exists in the remainder of the stream.\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Dataset_5clustered_definitions = {"clustered_definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_5clustered_definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_7Dataset_4clustered_definitions};
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_5clustered_definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_across_files = 0;
  PyObject *__pyx_v_spine_only = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clustered_definitions (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_spine_only,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_across_files,&__pyx_n_s_spine_only,0};
    #endif
    PyObject* values[2] = {0,0};
    values[0] = ((PyObject *)Py_False);
    values[1] = ((PyObject *)Py_False);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_across_files);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1177, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_spine_only);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1177, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "clustered_definitions") < 0)) __PYX_ERR(0, 1177, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_across_files = values[0];
    __pyx_v_spine_only = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clustered_definitions", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 1177, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset.clustered_definitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_4clustered_definitions(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self), __pyx_v_across_files, __pyx_v_spine_only);

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_4clustered_definitions(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, PyObject *__pyx_v_across_files, PyObject *__pyx_v_spine_only) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("clustered_definitions", 0);

  /* "pytact/data_reader.pyx":1191
 *         also exists in the remainder of the stream.
 *         """
 *         return Definition._group_by_clusters(             # <<<<<<<<<<<<<<
 *             self.definitions(
 *                 across_files = across_files,
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_n_s_group_by_clusters); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":1192
 *         """
 *         return Definition._group_by_clusters(
 *             self.definitions(             # <<<<<<<<<<<<<<
 *                 across_files = across_files,
 *                 spine_only = spine_only
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_definitions); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1193
 *         return Definition._group_by_clusters(
 *             self.definitions(
 *                 across_files = across_files,             # <<<<<<<<<<<<<<
 *                 spine_only = spine_only
 *             )
 */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_across_files, __pyx_v_across_files) < 0) __PYX_ERR(0, 1193, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1194
 *             self.definitions(
 *                 across_files = across_files,
 *                 spine_only = spine_only             # <<<<<<<<<<<<<<
 *             )
 *         )
 */
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_spine_only, __pyx_v_spine_only) < 0) __PYX_ERR(0, 1193, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1192
 *         """
 *         return Definition._group_by_clusters(
 *             self.definitions(             # <<<<<<<<<<<<<<
 *                 across_files = across_files,
 *                 spine_only = spine_only
 */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  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_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1191, __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;

  /* "pytact/data_reader.pyx":1177
 *             return Dataset_Definition_List.init(self.reader.getDefinitions(), self.graph_index, self.graph)
 * 
 *     def clustered_definitions(self, across_files = False, spine_only = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file, clustered by mutually recursive definitions.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.clustered_definitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1198
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def module_name(self) -> str:
 *         temp = self.reader.getModuleName()
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_11module_name_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_11module_name_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_11module_name___get__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_11module_name___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
   ::kj::StringPtr __pyx_v_temp;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
   ::kj::StringPtr __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1200
 *     @property
 *     def module_name(self) -> str:
 *         temp = self.reader.getModuleName()             # <<<<<<<<<<<<<<
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 */
  try {
    __pyx_t_1 = __pyx_v_self->reader.getModuleName();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1200, __pyx_L1_error)
  }
  __pyx_v_temp = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":1201
 *     def module_name(self) -> str:
 *         temp = self.reader.getModuleName()
 *         return (<char*>temp.begin())[:temp.size()]             # <<<<<<<<<<<<<<
 * 
 *     def node_by_id(self, nodeid: NodeId) -> Node:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyStr_FromStringAndSize(((char *)__pyx_v_temp.begin()) + 0, __pyx_v_temp.size() - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1198
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def module_name(self) -> str:
 *         temp = self.reader.getModuleName()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.module_name.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1203
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     def node_by_id(self, nodeid: NodeId) -> Node:             # <<<<<<<<<<<<<<
 *         """Lookup a node inside of this file by it's local node-id. This is a low-level function."""
 *         return Node.init(self.graph, nodeid, self.graph_index)
 */

/* Python wrapper */
static struct __pyx_obj_6pytact_11data_reader_Node *__pyx_pw_6pytact_11data_reader_7Dataset_7node_by_id(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_7Dataset_6node_by_id, "Lookup a node inside of this file by it's local node-id. This is a low-level function.");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Dataset_7node_by_id = {"node_by_id", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_7node_by_id, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_7Dataset_6node_by_id};
static struct __pyx_obj_6pytact_11data_reader_Node *__pyx_pw_6pytact_11data_reader_7Dataset_7node_by_id(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  __pyx_t_6pytact_11data_reader_NodeId __pyx_v_nodeid;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_6pytact_11data_reader_Node *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("node_by_id (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodeid,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nodeid,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_nodeid)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1203, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "node_by_id") < 0)) __PYX_ERR(0, 1203, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_nodeid = __Pyx_PyInt_As_uint32_t(values[0]); if (unlikely((__pyx_v_nodeid == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1203, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("node_by_id", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1203, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset.node_by_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_6node_by_id(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self), __pyx_v_nodeid);

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

static struct __pyx_obj_6pytact_11data_reader_Node *__pyx_pf_6pytact_11data_reader_7Dataset_6node_by_id(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, __pyx_t_6pytact_11data_reader_NodeId __pyx_v_nodeid) {
  struct __pyx_obj_6pytact_11data_reader_Node *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("node_by_id", 0);

  /* "pytact/data_reader.pyx":1205
 *     def node_by_id(self, nodeid: NodeId) -> Node:
 *         """Lookup a node inside of this file by it's local node-id. This is a low-level function."""
 *         return Node.init(self.graph, nodeid, self.graph_index)             # <<<<<<<<<<<<<<
 * 
 * def lowlevel_to_highlevel(LowlevelDataReader lreader) -> dict[Path, Dataset]:
 */
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_self->graph, __pyx_v_nodeid, __pyx_v_self->graph_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_6pytact_11data_reader_Node))))) __PYX_ERR(0, 1205, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_6pytact_11data_reader_Node *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1203
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     def node_by_id(self, nodeid: NodeId) -> Node:             # <<<<<<<<<<<<<<
 *         """Lookup a node inside of this file by it's local node-id. This is a low-level function."""
 *         return Node.init(self.graph, nodeid, self.graph_index)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.node_by_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1102
 * 
 *     cdef GraphIndex *graph_index
 *     cdef readonly GraphId graph             # <<<<<<<<<<<<<<
 *     cdef C_Dataset_Reader reader
 *     cdef readonly object filename # : Path
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_5graph_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_5graph_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_5graph___get__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_5graph___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(__pyx_v_self->graph); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.Dataset.graph.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1104
 *     cdef readonly GraphId graph
 *     cdef C_Dataset_Reader reader
 *     cdef readonly object filename # : Path             # <<<<<<<<<<<<<<
 *     """The physical file in which the data contained in this class can be found."""
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_8filename_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_8filename_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_8filename___get__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_8filename___get__(struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->filename);
  __pyx_r = __pyx_v_self->filename;
  goto __pyx_L0;

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

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

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_9__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Dataset_9__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_9__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_9__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_8__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.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.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_11__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_7Dataset_11__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_11__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_7Dataset_11__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_7Dataset_10__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_Dataset *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_7Dataset_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_Dataset *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_self_reader_can, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.Dataset.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1207
 *         return Node.init(self.graph, nodeid, self.graph_index)
 * 
 * def lowlevel_to_highlevel(LowlevelDataReader lreader) -> dict[Path, Dataset]:             # <<<<<<<<<<<<<<
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_9lowlevel_to_highlevel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_8lowlevel_to_highlevel, "Convert a dataset initialized as a `LowLevelDataReader` into a high level interface.");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_9lowlevel_to_highlevel = {"lowlevel_to_highlevel", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9lowlevel_to_highlevel, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_8lowlevel_to_highlevel};
static PyObject *__pyx_pw_6pytact_11data_reader_9lowlevel_to_highlevel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_lreader = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lowlevel_to_highlevel (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lreader,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lreader,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lreader)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1207, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "lowlevel_to_highlevel") < 0)) __PYX_ERR(0, 1207, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_lreader = ((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("lowlevel_to_highlevel", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1207, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.lowlevel_to_highlevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lreader), __pyx_ptype_6pytact_11data_reader_LowlevelDataReader, 1, "lreader", 0))) __PYX_ERR(0, 1207, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_8lowlevel_to_highlevel(__pyx_self, __pyx_v_lreader);

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

static PyObject *__pyx_pf_6pytact_11data_reader_8lowlevel_to_highlevel(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *__pyx_v_lreader) {
  PyObject *__pyx_8genexpr7__pyx_v_f = NULL;
  PyObject *__pyx_8genexpr7__pyx_v_g = 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 *);
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *(*__pyx_t_10)(PyObject *);
  __pyx_t_6pytact_11data_reader_GraphId __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("lowlevel_to_highlevel", 0);

  /* "pytact/data_reader.pyx":1209
 * def lowlevel_to_highlevel(LowlevelDataReader lreader) -> dict[Path, Dataset]:
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)             # <<<<<<<<<<<<<<
 *             for f, g in lreader.graphid_by_filename.items()}
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1209, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_1);

    /* "pytact/data_reader.pyx":1210
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)
 *             for f, g in lreader.graphid_by_filename.items()}             # <<<<<<<<<<<<<<
 * 
 * @contextmanager
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_lreader->graphid_by_filename, __pyx_n_s_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1210, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    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_5 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_4, };
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1210, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    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, 1210, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1210, __pyx_L5_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, 1210, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1210, __pyx_L5_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, 1210, __pyx_L5_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1210, __pyx_L5_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, 1210, __pyx_L5_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
        PyObject* sequence = __pyx_t_2;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 1210, __pyx_L5_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_8);
        #else
        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1210, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1210, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_8);
        #endif
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1210, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
        index = 0; __pyx_t_4 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_4);
        index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_8);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 1210, __pyx_L5_error)
        __pyx_t_10 = NULL;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L9_unpacking_done;
        __pyx_L8_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_10 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 1210, __pyx_L5_error)
        __pyx_L9_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_8genexpr7__pyx_v_f, __pyx_t_4);
      __pyx_t_4 = 0;
      __Pyx_XDECREF_SET(__pyx_8genexpr7__pyx_v_g, __pyx_t_8);
      __pyx_t_8 = 0;

      /* "pytact/data_reader.pyx":1209
 * def lowlevel_to_highlevel(LowlevelDataReader lreader) -> dict[Path, Dataset]:
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)             # <<<<<<<<<<<<<<
 *             for f, g in lreader.graphid_by_filename.items()}
 * 
 */
      __pyx_t_11 = __Pyx_PyInt_As_uint32_t(__pyx_8genexpr7__pyx_v_g); if (unlikely((__pyx_t_11 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1209, __pyx_L5_error)
      __pyx_t_2 = __pyx_f_6pytact_11data_reader_7Dataset_init(__pyx_8genexpr7__pyx_v_f, __pyx_t_11, __pyx_v_lreader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1209, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(PyDict_SetItem(__pyx_t_1, (PyObject*)__pyx_8genexpr7__pyx_v_f, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 1209, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":1210
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)
 *             for f, g in lreader.graphid_by_filename.items()}             # <<<<<<<<<<<<<<
 * 
 * @contextmanager
 */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_f); __pyx_8genexpr7__pyx_v_f = 0;
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_g); __pyx_8genexpr7__pyx_v_g = 0;
    goto __pyx_L10_exit_scope;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_f); __pyx_8genexpr7__pyx_v_f = 0;
    __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_g); __pyx_8genexpr7__pyx_v_g = 0;
    goto __pyx_L1_error;
    __pyx_L10_exit_scope:;
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1207
 *         return Node.init(self.graph, nodeid, self.graph_index)
 * 
 * def lowlevel_to_highlevel(LowlevelDataReader lreader) -> dict[Path, Dataset]:             # <<<<<<<<<<<<<<
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pytact.data_reader.lowlevel_to_highlevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_f);
  __Pyx_XDECREF(__pyx_8genexpr7__pyx_v_g);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_12generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1212
 *             for f, g in lreader.graphid_by_filename.items()}
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def data_reader(dataset_path: Path) -> Generator[dict[Path, Dataset], None, None]:
 *     """Load a directory of dataset files into memory, and expose the data they contain.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_11data_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_10data_reader, "Load a directory of dataset files into memory, and expose the data they contain.\n    The result is a dictionary that maps physical paths to `Dataset` instances that allow access to the data.\n\n    Arguments:\n    `dataset_path`: Can either be a dataset directory, or a SquashFS image file. In case of an image\n                    file `dataset.squ`, the image will be mounted using `squashfuse` on directory\n                    `dataset/`, after which the contents of that directory will be read.\n\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_11data_reader = {"data_reader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_11data_reader, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_10data_reader};
static PyObject *__pyx_pw_6pytact_11data_reader_11data_reader(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_dataset_path = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("data_reader (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dataset_path,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dataset_path)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1212, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "data_reader") < 0)) __PYX_ERR(0, 1212, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_dataset_path = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("data_reader", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1212, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.data_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_10data_reader(__pyx_self, __pyx_v_dataset_path);

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

static PyObject *__pyx_pf_6pytact_11data_reader_10data_reader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dataset_path) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("data_reader", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_6_data_reader(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1212, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_dataset_path = __pyx_v_dataset_path;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_dataset_path);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_dataset_path);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_12generator5, __pyx_codeobj__17, (PyObject *) __pyx_cur_scope, __pyx_n_s_data_reader, __pyx_n_s_data_reader, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1212, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.data_reader", __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_6pytact_11data_reader_12generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("data_reader", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L14_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, 1212, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1223
 * 
 *     """
 *     with lowlevel_data_reader(dataset_path) as lreader:             # <<<<<<<<<<<<<<
 *         yield lowlevel_to_highlevel(lreader)
 * 
 */
  /*with:*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_lowlevel_data_reader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1223, __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;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_dataset_path};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1223, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1223, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1223, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[1] = {__pyx_t_6, };
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1223, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    /*try:*/ {
      {
        __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_7);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        /*try:*/ {
          __Pyx_GIVEREF(__pyx_t_3);
          __pyx_cur_scope->__pyx_v_lreader = __pyx_t_3;
          __pyx_t_3 = 0;

          /* "pytact/data_reader.pyx":1224
 *     """
 *     with lowlevel_data_reader(dataset_path) as lreader:
 *         yield lowlevel_to_highlevel(lreader)             # <<<<<<<<<<<<<<
 * 
 * cdef class OnlineDefinitionsReader:
 */
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_lowlevel_to_highlevel); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1224, __pyx_L8_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_2 = NULL;
          __pyx_t_4 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
              __pyx_t_4 = 1;
            }
          }
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_lreader};
            __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1224, __pyx_L8_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __pyx_r = __pyx_t_3;
          __pyx_t_3 = 0;
          __Pyx_XGIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_t_0 = __pyx_t_5;
          __Pyx_XGIVEREF(__pyx_t_7);
          __pyx_cur_scope->__pyx_t_1 = __pyx_t_7;
          __Pyx_XGIVEREF(__pyx_t_8);
          __pyx_cur_scope->__pyx_t_2 = __pyx_t_8;
          __Pyx_XGIVEREF(__pyx_t_9);
          __pyx_cur_scope->__pyx_t_3 = __pyx_t_9;
          __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_L14_resume_from_yield:;
          __pyx_t_5 = __pyx_cur_scope->__pyx_t_0;
          __pyx_cur_scope->__pyx_t_0 = 0;
          __Pyx_XGOTREF(__pyx_t_5);
          __pyx_t_7 = __pyx_cur_scope->__pyx_t_1;
          __pyx_cur_scope->__pyx_t_1 = 0;
          __Pyx_XGOTREF(__pyx_t_7);
          __pyx_t_8 = __pyx_cur_scope->__pyx_t_2;
          __pyx_cur_scope->__pyx_t_2 = 0;
          __Pyx_XGOTREF(__pyx_t_8);
          __pyx_t_9 = __pyx_cur_scope->__pyx_t_3;
          __pyx_cur_scope->__pyx_t_3 = 0;
          __Pyx_XGOTREF(__pyx_t_9);
          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1224, __pyx_L8_error)

          /* "pytact/data_reader.pyx":1223
 * 
 *     """
 *     with lowlevel_data_reader(dataset_path) as lreader:             # <<<<<<<<<<<<<<
 *         yield lowlevel_to_highlevel(lreader)
 * 
 */
        }
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_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;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        /*except:*/ {
          __Pyx_AddTraceback("pytact.data_reader.data_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_2) < 0) __PYX_ERR(0, 1223, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1223, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1223, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_11 < 0) __PYX_ERR(0, 1223, __pyx_L10_except_error)
          __pyx_t_12 = (!__pyx_t_11);
          if (unlikely(__pyx_t_12)) {
            __Pyx_GIVEREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_1);
            __Pyx_XGIVEREF(__pyx_t_2);
            __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_1, __pyx_t_2);
            __pyx_t_3 = 0; __pyx_t_1 = 0; __pyx_t_2 = 0; 
            __PYX_ERR(0, 1223, __pyx_L10_except_error)
          }
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          goto __pyx_L9_exception_handled;
        }
        __pyx_L10_except_error:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_L13_try_end:;
      }
    }
    /*finally:*/ {
      /*normal exit:*/{
        if (__pyx_t_5) {
          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__2, NULL);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1223, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        }
        goto __pyx_L7;
      }
      __pyx_L7:;
    }
    goto __pyx_L18;
    __pyx_L4_error:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L1_error;
    __pyx_L18:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1212
 *             for f, g in lreader.graphid_by_filename.items()}
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def data_reader(dataset_path: Path) -> Generator[dict[Path, Dataset], None, None]:
 *     """Load a directory of dataset files into memory, and expose the data they contain.
 */

  /* 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("data_reader", __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;
}

/* "pytact/data_reader.pyx":1231
 * 
 *     @staticmethod
 *     cdef init(GraphIndex graph_index, C_PredictionProtocol_Request_Initialize_Reader init):             # <<<<<<<<<<<<<<
 *         cdef OnlineDefinitionsReader wrapper = OnlineDefinitionsReader.__new__(OnlineDefinitionsReader)
 * 
 */

static PyObject *__pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init(struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_v_graph_index, PredictionProtocol::Request::Initialize::Reader __pyx_v_init) {
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Graph::Reader __pyx_t_2;
   ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader __pyx_t_3;
   ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader __pyx_t_4;
  uint32_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  std::vector<uint32_t>  __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "pytact/data_reader.pyx":1232
 *     @staticmethod
 *     cdef init(GraphIndex graph_index, C_PredictionProtocol_Request_Initialize_Reader init):
 *         cdef OnlineDefinitionsReader wrapper = OnlineDefinitionsReader.__new__(OnlineDefinitionsReader)             # <<<<<<<<<<<<<<
 * 
 *         graph_index.nodes.push_back(init.getGraph().getNodes())
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_OnlineDefinitionsReader(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1232, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1234
 *         cdef OnlineDefinitionsReader wrapper = OnlineDefinitionsReader.__new__(OnlineDefinitionsReader)
 * 
 *         graph_index.nodes.push_back(init.getGraph().getNodes())             # <<<<<<<<<<<<<<
 *         graph_index.edges.push_back(init.getGraph().getEdges())
 *         graph_index.representatives.push_back(init.getRepresentative())
 */
  try {
    __pyx_t_2 = __pyx_v_init.getGraph();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1234, __pyx_L1_error)
  }
  try {
    __pyx_t_3 = __pyx_t_2.getNodes();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1234, __pyx_L1_error)
  }
  try {
    __pyx_v_graph_index.nodes.push_back(__pyx_t_3);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1234, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1235
 * 
 *         graph_index.nodes.push_back(init.getGraph().getNodes())
 *         graph_index.edges.push_back(init.getGraph().getEdges())             # <<<<<<<<<<<<<<
 *         graph_index.representatives.push_back(init.getRepresentative())
 *         graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))
 */
  try {
    __pyx_t_2 = __pyx_v_init.getGraph();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1235, __pyx_L1_error)
  }
  try {
    __pyx_t_4 = __pyx_t_2.getEdges();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1235, __pyx_L1_error)
  }
  try {
    __pyx_v_graph_index.edges.push_back(__pyx_t_4);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1235, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1236
 *         graph_index.nodes.push_back(init.getGraph().getNodes())
 *         graph_index.edges.push_back(init.getGraph().getEdges())
 *         graph_index.representatives.push_back(init.getRepresentative())             # <<<<<<<<<<<<<<
 *         graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))
 *         wrapper.graph_index = graph_index
 */
  try {
    __pyx_t_5 = __pyx_v_init.getRepresentative();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1236, __pyx_L1_error)
  }
  try {
    __pyx_v_graph_index.representatives.push_back(__pyx_t_5);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1236, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1237
 *         graph_index.edges.push_back(init.getGraph().getEdges())
 *         graph_index.representatives.push_back(init.getRepresentative())
 *         graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))             # <<<<<<<<<<<<<<
 *         wrapper.graph_index = graph_index
 *         return wrapper
 */
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_v_graph_index.nodes.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_reversed, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_7 = __pyx_convert_vector_from_py_uint32_t(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  try {
    __pyx_v_graph_index.local_to_global.push_back(__pyx_t_7);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1237, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1238
 *         graph_index.representatives.push_back(init.getRepresentative())
 *         graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))
 *         wrapper.graph_index = graph_index             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_v_wrapper->graph_index = __pyx_v_graph_index;

  /* "pytact/data_reader.pyx":1239
 *         graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))
 *         wrapper.graph_index = graph_index
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1231
 * 
 *     @staticmethod
 *     cdef init(GraphIndex graph_index, C_PredictionProtocol_Request_Initialize_Reader init):             # <<<<<<<<<<<<<<
 *         cdef OnlineDefinitionsReader wrapper = OnlineDefinitionsReader.__new__(OnlineDefinitionsReader)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1242
 * 
 *     @staticmethod
 *     cdef init_empty():             # <<<<<<<<<<<<<<
 *         cdef OnlineDefinitionsReader wrapper = OnlineDefinitionsReader.__new__(OnlineDefinitionsReader)
 * 
 */

static PyObject *__pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init_empty(void) {
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_wrapper = 0;
  std::vector< ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader>  __pyx_v_c_nodes;
  std::vector< ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader>  __pyx_v_c_edges;
  std::vector<uint32_t>  __pyx_v_c_representatives;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_t_2;
  std::vector<std::vector<uint32_t> >  __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_empty", 0);

  /* "pytact/data_reader.pyx":1243
 *     @staticmethod
 *     cdef init_empty():
 *         cdef OnlineDefinitionsReader wrapper = OnlineDefinitionsReader.__new__(OnlineDefinitionsReader)             # <<<<<<<<<<<<<<
 * 
 *         cdef vector[C_Graph_Node_Reader_List] c_nodes
 */
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_6pytact_11data_reader_OnlineDefinitionsReader(((PyTypeObject *)__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1243, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1248
 *         cdef vector[C_Graph_EdgeTarget_Reader_List] c_edges
 *         cdef vector[uint32_t] c_representatives
 *         wrapper.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, [])             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
 */
  __pyx_t_2.nodes = __pyx_v_c_nodes;
  __pyx_t_2.edges = __pyx_v_c_edges;
  __pyx_t_2.representatives = __pyx_v_c_representatives;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(__pyx_t_1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_2.local_to_global = __pyx_t_3;
  __pyx_v_wrapper->graph_index = __pyx_t_2;

  /* "pytact/data_reader.pyx":1249
 *         cdef vector[uint32_t] c_representatives
 *         wrapper.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, [])
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = ((PyObject *)__pyx_v_wrapper);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1242
 * 
 *     @staticmethod
 *     cdef init_empty():             # <<<<<<<<<<<<<<
 *         cdef OnlineDefinitionsReader wrapper = OnlineDefinitionsReader.__new__(OnlineDefinitionsReader)
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.init_empty", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1251
 *         return wrapper
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_1local_to_global(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_1local_to_global = {"local_to_global", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_1local_to_global, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_1local_to_global(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_graph = 0;
  PyObject *__pyx_v_dep_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("local_to_global (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_graph,&__pyx_n_s_dep_index,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_graph,&__pyx_n_s_dep_index,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_graph)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1251, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dep_index)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1251, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("local_to_global", 1, 2, 2, 1); __PYX_ERR(0, 1251, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "local_to_global") < 0)) __PYX_ERR(0, 1251, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_graph = ((PyObject*)values[0]);
    __pyx_v_dep_index = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("local_to_global", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1251, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.local_to_global", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_graph), (&PyInt_Type), 0, "graph", 1))) __PYX_ERR(0, 1251, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dep_index), (&PyInt_Type), 0, "dep_index", 1))) __PYX_ERR(0, 1251, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_local_to_global(((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_v_self), __pyx_v_graph, __pyx_v_dep_index);

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

static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_local_to_global(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, PyObject *__pyx_v_graph, PyObject *__pyx_v_dep_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  std::vector<std::vector<uint32_t> > ::size_type __pyx_t_1;
  std::vector<uint32_t> ::size_type __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("local_to_global", 0);

  /* "pytact/data_reader.pyx":1252
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:
 *         return self.graph_index.local_to_global[graph][dep_index]             # <<<<<<<<<<<<<<
 * 
 *     @property
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_As_size_t(__pyx_v_graph); if (unlikely((__pyx_t_1 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1252, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_As_size_t(__pyx_v_dep_index); if (unlikely((__pyx_t_2 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1252, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(((__pyx_v_self->graph_index.local_to_global[__pyx_t_1])[__pyx_t_2])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (!(likely(PyInt_CheckExact(__pyx_t_3)) || __Pyx_RaiseUnexpectedTypeError("int", __pyx_t_3))) __PYX_ERR(0, 1252, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1251
 *         return wrapper
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.local_to_global", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1254
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def representative(self) -> Definition | None:
 *         """The last definition in the global context. All other definitions can be accessed by following
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_14representative_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_14representative_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_14representative___get__(((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_14representative___get__(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self) {
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_v_graph_index;
  std::vector<uint32_t> ::size_type __pyx_v_i;
  uint32_t __pyx_v_representative;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_t_1;
  std::vector<uint32_t> ::size_type __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "pytact/data_reader.pyx":1262
 *         Prefer to use `definitions` and `clustered_definitions`.
 *         """
 *         graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *         for i in reversed(range(graph_index.representatives.size())):
 *             representative = graph_index.representatives[i]
 */
  __pyx_t_1 = __pyx_v_self->graph_index;
  __pyx_v_graph_index = __pyx_t_1;

  /* "pytact/data_reader.pyx":1263
 *         """
 *         graph_index = self.graph_index
 *         for i in reversed(range(graph_index.representatives.size())):             # <<<<<<<<<<<<<<
 *             representative = graph_index.representatives[i]
 *             if graph_index.nodes[i].size() == representative:
 */
  for (__pyx_t_2 = __pyx_v_graph_index.representatives.size()-1 + 1; __pyx_t_2 >= 0 + 1; ) { __pyx_t_2-=1;
    __pyx_v_i = __pyx_t_2;

    /* "pytact/data_reader.pyx":1264
 *         graph_index = self.graph_index
 *         for i in reversed(range(graph_index.representatives.size())):
 *             representative = graph_index.representatives[i]             # <<<<<<<<<<<<<<
 *             if graph_index.nodes[i].size() == representative:
 *                 continue
 */
    __pyx_v_representative = (__pyx_v_graph_index.representatives[__pyx_v_i]);

    /* "pytact/data_reader.pyx":1265
 *         for i in reversed(range(graph_index.representatives.size())):
 *             representative = graph_index.representatives[i]
 *             if graph_index.nodes[i].size() == representative:             # <<<<<<<<<<<<<<
 *                 continue
 *             else:
 */
    __pyx_t_3 = ((__pyx_v_graph_index.nodes[__pyx_v_i]).size() == __pyx_v_representative);
    if (__pyx_t_3) {

      /* "pytact/data_reader.pyx":1266
 *             representative = graph_index.representatives[i]
 *             if graph_index.nodes[i].size() == representative:
 *                 continue             # <<<<<<<<<<<<<<
 *             else:
 *                 return Node.init(i, representative, &self.graph_index).definition
 */
      goto __pyx_L3_continue;

      /* "pytact/data_reader.pyx":1265
 *         for i in reversed(range(graph_index.representatives.size())):
 *             representative = graph_index.representatives[i]
 *             if graph_index.nodes[i].size() == representative:             # <<<<<<<<<<<<<<
 *                 continue
 *             else:
 */
    }

    /* "pytact/data_reader.pyx":1268
 *                 continue
 *             else:
 *                 return Node.init(i, representative, &self.graph_index).definition             # <<<<<<<<<<<<<<
 *         return None
 * 
 */
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_i, __pyx_v_representative, (&__pyx_v_self->graph_index)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_definition); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = __pyx_t_5;
      __pyx_t_5 = 0;
      goto __pyx_L0;
    }
    __pyx_L3_continue:;
  }

  /* "pytact/data_reader.pyx":1269
 *             else:
 *                 return Node.init(i, representative, &self.graph_index).definition
 *         return None             # <<<<<<<<<<<<<<
 * 
 *     def definitions(self, full : bool = True) -> Iterable[Definition]:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1254
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def representative(self) -> Definition | None:
 *         """The last definition in the global context. All other definitions can be accessed by following
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.representative.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1271
 *         return None
 * 
 *     def definitions(self, full : bool = True) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """The list of definitions that are currently in the global context.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_3definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_23OnlineDefinitionsReader_2definitions, "The list of definitions that are currently in the global context.\n\n        The resulting iterable is topologically sorted. That is, for any definition in the stream, any\n        definition reachable from the forward closure of the definition also exists in the remainder of\n        the stream. An exception to this rule are mutually recursive definitions,\n        because no topological sort is possible there (see also `clustered_definitions`).\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_3definitions = {"definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_3definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_23OnlineDefinitionsReader_2definitions};
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_3definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_full = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("definitions (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_full,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_full,0};
    #endif
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_True);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_full);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1271, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "definitions") < 0)) __PYX_ERR(0, 1271, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_full = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("definitions", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 1271, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.definitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_2definitions(((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_v_self), __pyx_v_full);

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

static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_2definitions(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, PyObject *__pyx_v_full) {
  PyObject *__pyx_v_representative = NULL;
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_v_graph_index;
  PyObject *__pyx_v_size = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_t_3;
  std::vector<uint32_t> ::size_type __pyx_t_4;
  std::vector< ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader> ::size_type __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  __pyx_t_6pytact_11data_reader_GraphId __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("definitions", 0);

  /* "pytact/data_reader.pyx":1279
 *         because no topological sort is possible there (see also `clustered_definitions`).
 *         """
 *         if full:             # <<<<<<<<<<<<<<
 *             representative = self.representative
 *         else:
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_full); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1279, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "pytact/data_reader.pyx":1280
 *         """
 *         if full:
 *             representative = self.representative             # <<<<<<<<<<<<<<
 *         else:
 *             graph_index = self.graph_index
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_representative); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_representative = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "pytact/data_reader.pyx":1279
 *         because no topological sort is possible there (see also `clustered_definitions`).
 *         """
 *         if full:             # <<<<<<<<<<<<<<
 *             representative = self.representative
 *         else:
 */
    goto __pyx_L3;
  }

  /* "pytact/data_reader.pyx":1282
 *             representative = self.representative
 *         else:
 *             graph_index = self.graph_index             # <<<<<<<<<<<<<<
 *             size = graph_index.representatives.size()
 *             if size == 0:
 */
  /*else*/ {
    __pyx_t_3 = __pyx_v_self->graph_index;
    __pyx_v_graph_index = __pyx_t_3;

    /* "pytact/data_reader.pyx":1283
 *         else:
 *             graph_index = self.graph_index
 *             size = graph_index.representatives.size()             # <<<<<<<<<<<<<<
 *             if size == 0:
 *                 representative = None
 */
    __pyx_t_2 = __Pyx_PyInt_FromSize_t(__pyx_v_graph_index.representatives.size()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_size = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "pytact/data_reader.pyx":1284
 *             graph_index = self.graph_index
 *             size = graph_index.representatives.size()
 *             if size == 0:             # <<<<<<<<<<<<<<
 *                 representative = None
 *             else:
 */
    __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_v_size, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1284, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {

      /* "pytact/data_reader.pyx":1285
 *             size = graph_index.representatives.size()
 *             if size == 0:
 *                 representative = None             # <<<<<<<<<<<<<<
 *             else:
 *                 representative = graph_index.representatives[size - 1]
 */
      __Pyx_INCREF(Py_None);
      __pyx_v_representative = Py_None;

      /* "pytact/data_reader.pyx":1284
 *             graph_index = self.graph_index
 *             size = graph_index.representatives.size()
 *             if size == 0:             # <<<<<<<<<<<<<<
 *                 representative = None
 *             else:
 */
      goto __pyx_L4;
    }

    /* "pytact/data_reader.pyx":1287
 *                 representative = None
 *             else:
 *                 representative = graph_index.representatives[size - 1]             # <<<<<<<<<<<<<<
 *                 if graph_index.nodes[size - 1].size() == representative:
 *                     representative = None
 */
    /*else*/ {
      __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_v_size, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyInt_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1287, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyInt_From_uint32_t((__pyx_v_graph_index.representatives[__pyx_t_4])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1287, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_v_representative = __pyx_t_2;
      __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":1288
 *             else:
 *                 representative = graph_index.representatives[size - 1]
 *                 if graph_index.nodes[size - 1].size() == representative:             # <<<<<<<<<<<<<<
 *                     representative = None
 *                 else:
 */
      __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_v_size, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyInt_As_size_t(__pyx_t_2); if (unlikely((__pyx_t_5 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1288, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyInt_From_unsigned_int((__pyx_v_graph_index.nodes[__pyx_t_5]).size()); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_v_representative, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1288, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1288, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (__pyx_t_1) {

        /* "pytact/data_reader.pyx":1289
 *                 representative = graph_index.representatives[size - 1]
 *                 if graph_index.nodes[size - 1].size() == representative:
 *                     representative = None             # <<<<<<<<<<<<<<
 *                 else:
 *                     representative = Node.init(size - 1, representative, &self.graph_index).definition
 */
        __Pyx_INCREF(Py_None);
        __Pyx_DECREF_SET(__pyx_v_representative, Py_None);

        /* "pytact/data_reader.pyx":1288
 *             else:
 *                 representative = graph_index.representatives[size - 1]
 *                 if graph_index.nodes[size - 1].size() == representative:             # <<<<<<<<<<<<<<
 *                     representative = None
 *                 else:
 */
        goto __pyx_L5;
      }

      /* "pytact/data_reader.pyx":1291
 *                     representative = None
 *                 else:
 *                     representative = Node.init(size - 1, representative, &self.graph_index).definition             # <<<<<<<<<<<<<<
 *         if representative is None: return ()
 *         return representative.global_context(inclusive = True, across_files = full)
 */
      /*else*/ {
        __pyx_t_6 = __Pyx_PyInt_SubtractObjC(__pyx_v_size, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1291, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyInt_As_uint32_t(__pyx_t_6); if (unlikely((__pyx_t_7 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1291, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_representative); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1291, __pyx_L1_error)
        __pyx_t_6 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_t_7, __pyx_t_8, (&__pyx_v_self->graph_index)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1291, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_definition); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1291, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF_SET(__pyx_v_representative, __pyx_t_2);
        __pyx_t_2 = 0;
      }
      __pyx_L5:;
    }
    __pyx_L4:;
  }
  __pyx_L3:;

  /* "pytact/data_reader.pyx":1292
 *                 else:
 *                     representative = Node.init(size - 1, representative, &self.graph_index).definition
 *         if representative is None: return ()             # <<<<<<<<<<<<<<
 *         return representative.global_context(inclusive = True, across_files = full)
 * 
 */
  __pyx_t_1 = (__pyx_v_representative == Py_None);
  if (__pyx_t_1) {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_empty_tuple);
    __pyx_r = __pyx_empty_tuple;
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":1293
 *                     representative = Node.init(size - 1, representative, &self.graph_index).definition
 *         if representative is None: return ()
 *         return representative.global_context(inclusive = True, across_files = full)             # <<<<<<<<<<<<<<
 * 
 *     def clustered_definitions(self, full : bool = True) -> Iterable[list[Definition]]:
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_representative, __pyx_n_s_global_context_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_inclusive, Py_True) < 0) __PYX_ERR(0, 1293, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_across_files, __pyx_v_full) < 0) __PYX_ERR(0, 1293, __pyx_L1_error)
  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1271
 *         return None
 * 
 *     def definitions(self, full : bool = True) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """The list of definitions that are currently in the global context.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.definitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_representative);
  __Pyx_XDECREF(__pyx_v_size);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1295
 *         return representative.global_context(inclusive = True, across_files = full)
 * 
 *     def clustered_definitions(self, full : bool = True) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the global context, clustered by mutually recursive definitions.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_5clustered_definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_23OnlineDefinitionsReader_4clustered_definitions, "All of the definitions present in the global context, clustered by mutually recursive definitions.\n\n        The resulting iterable is topologically sorted. That is, for any definition in the stream, any\n        definition reachable from the forward closure of the definition also exists in the remainder of\n        the stream.\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_5clustered_definitions = {"clustered_definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_5clustered_definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_23OnlineDefinitionsReader_4clustered_definitions};
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_5clustered_definitions(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_full = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clustered_definitions (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_full,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_full,0};
    #endif
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_True);
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_full);
          if (value) { values[0] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1295, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "clustered_definitions") < 0)) __PYX_ERR(0, 1295, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_full = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clustered_definitions", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 1295, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.clustered_definitions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_4clustered_definitions(((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_v_self), __pyx_v_full);

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

static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_4clustered_definitions(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, PyObject *__pyx_v_full) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("clustered_definitions", 0);

  /* "pytact/data_reader.pyx":1302
 *         the stream.
 *         """
 *         return Definition._group_by_clusters(self.definitions(full))             # <<<<<<<<<<<<<<
 * 
 * @contextmanager
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition), __pyx_n_s_group_by_clusters); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_definitions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_full};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1302, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_t_4 = NULL;
  __pyx_t_6 = 0;
  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_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
    __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, 1302, __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;

  /* "pytact/data_reader.pyx":1295
 *         return representative.global_context(inclusive = True, across_files = full)
 * 
 *     def clustered_definitions(self, full : bool = True) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the global context, clustered by mutually recursive definitions.
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.clustered_definitions", __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.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  if (unlikely(__pyx_nargs > 0)) {
    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_6__reduce_cython__(((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_v_self));

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

static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_cannot_be_conve, 0, 0);
  __PYX_ERR(1, 2, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.__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.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_8__setstate_cython__(((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)__pyx_v_self), __pyx_v___pyx_state);

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

static PyObject *__pyx_pf_6pytact_11data_reader_23OnlineDefinitionsReader_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
 */
  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self_graph_index_cannot_be_conve, 0, 0);
  __PYX_ERR(1, 4, __pyx_L1_error)

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

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.OnlineDefinitionsReader.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_15generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1304
 *         return Definition._group_by_clusters(self.definitions(full))
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_definitions_initialize(OnlineDefinitionsReader stack,
 *                                   PredictionProtocol_Request_Initialize_Reader init) -> Generator[OnlineDefinitionsReader, None, None]:
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_14online_definitions_initialize(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_13online_definitions_initialize, "Given a new initialization message sent by Coq, construct a `OnlineDefinitiosnReader` object. This can be used\n    to inspect the definitions currently available. Additionally, using `online_data_predict` it can\n    be combined with a subsequent prediction request received from Coq to build a `ProofState`.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_14online_definitions_initialize = {"online_definitions_initialize", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_14online_definitions_initialize, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_13online_definitions_initialize};
static PyObject *__pyx_pw_6pytact_11data_reader_14online_definitions_initialize(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_stack = 0;
  struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader *__pyx_v_init = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("online_definitions_initialize (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_stack,&__pyx_n_s_init_2,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_stack,&__pyx_n_s_init_2,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_stack)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1304, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_init_2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1304, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("online_definitions_initialize", 1, 2, 2, 1); __PYX_ERR(0, 1304, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "online_definitions_initialize") < 0)) __PYX_ERR(0, 1304, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_stack = ((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)values[0]);
    __pyx_v_init = ((struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("online_definitions_initialize", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1304, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.online_definitions_initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_stack), __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader, 1, "stack", 0))) __PYX_ERR(0, 1305, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_init), __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader, 1, "init", 0))) __PYX_ERR(0, 1306, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_13online_definitions_initialize(__pyx_self, __pyx_v_stack, __pyx_v_init);

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

static PyObject *__pyx_pf_6pytact_11data_reader_13online_definitions_initialize(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_stack, struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader *__pyx_v_init) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("online_definitions_initialize", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1304, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_stack = __pyx_v_stack;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_stack);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_stack);
  __pyx_cur_scope->__pyx_v_init = __pyx_v_init;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_init);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_init);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_15generator6, __pyx_codeobj__18, (PyObject *) __pyx_cur_scope, __pyx_n_s_online_definitions_initialize, __pyx_n_s_online_definitions_initialize, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1304, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.online_definitions_initialize", __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_6pytact_11data_reader_15generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("online_definitions_initialize", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L4_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, 1304, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1318
 *     # If the Python runtime ever becomes clever and eliminates this variable, a different
 *     # method of keeping the object around should be found.
 *     graph_index = stack.graph_index             # <<<<<<<<<<<<<<
 *     dr = OnlineDefinitionsReader.init(graph_index, init.source)
 *     yield dr
 */
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_stack->graph_index;
  __pyx_cur_scope->__pyx_v_graph_index = __pyx_t_1;

  /* "pytact/data_reader.pyx":1319
 *     # method of keeping the object around should be found.
 *     graph_index = stack.graph_index
 *     dr = OnlineDefinitionsReader.init(graph_index, init.source)             # <<<<<<<<<<<<<<
 *     yield dr
 * 
 */
  __pyx_t_2 = __pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init(__pyx_cur_scope->__pyx_v_graph_index, __pyx_cur_scope->__pyx_v_init->source); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_dr = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1320
 *     graph_index = stack.graph_index
 *     dr = OnlineDefinitionsReader.init(graph_index, init.source)
 *     yield dr             # <<<<<<<<<<<<<<
 * 
 * def empty_online_definitions_initialize() -> OnlineDefinitionsReader:
 */
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_dr);
  __pyx_r = __pyx_cur_scope->__pyx_v_dr;
  __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_L4_resume_from_yield:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1320, __pyx_L1_error)
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1304
 *         return Definition._group_by_clusters(self.definitions(full))
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_definitions_initialize(OnlineDefinitionsReader stack,
 *                                   PredictionProtocol_Request_Initialize_Reader init) -> Generator[OnlineDefinitionsReader, None, None]:
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("online_definitions_initialize", __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;
}

/* "pytact/data_reader.pyx":1322
 *     yield dr
 * 
 * def empty_online_definitions_initialize() -> OnlineDefinitionsReader:             # <<<<<<<<<<<<<<
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 */

/* Python wrapper */
static struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_pw_6pytact_11data_reader_17empty_online_definitions_initialize(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17empty_online_definitions_initialize = {"empty_online_definitions_initialize", (PyCFunction)__pyx_pw_6pytact_11data_reader_17empty_online_definitions_initialize, METH_NOARGS, 0};
static struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_pw_6pytact_11data_reader_17empty_online_definitions_initialize(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("empty_online_definitions_initialize (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_16empty_online_definitions_initialize(__pyx_self);

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

static struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_pf_6pytact_11data_reader_16empty_online_definitions_initialize(CYTHON_UNUSED PyObject *__pyx_self) {
  CYTHON_UNUSED PyObject *__pyx_v_defs = NULL;
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("empty_online_definitions_initialize", 0);

  /* "pytact/data_reader.pyx":1323
 * 
 * def empty_online_definitions_initialize() -> OnlineDefinitionsReader:
 *     defs = OnlineDefinitionsReader.init_empty()             # <<<<<<<<<<<<<<
 * 
 * @contextmanager
 */
  __pyx_t_1 = __pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init_empty(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_defs = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1322
 *     yield dr
 * 
 * def empty_online_definitions_initialize() -> OnlineDefinitionsReader:             # <<<<<<<<<<<<<<
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 */

  /* function exit code */
  __pyx_r = ((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("pytact.data_reader.empty_online_definitions_initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_defs);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_20generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1325
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_data_predict(OnlineDefinitionsReader base,
 *                         PredictionProtocol_Request_Predict_Reader predict) -> Generator[ProofState, None, None]:
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_19online_data_predict(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_18online_data_predict, "Given a `OnlineDefinitionsReader` instance constructed through `online_data_initialize`, and a prediction message\n    sent by Coq, construct a `ProofState` object that represents the current proof state in Coq.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_19online_data_predict = {"online_data_predict", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_19online_data_predict, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_18online_data_predict};
static PyObject *__pyx_pw_6pytact_11data_reader_19online_data_predict(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_base = 0;
  struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader *__pyx_v_predict = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("online_data_predict (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_base,&__pyx_n_s_predict,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_base,&__pyx_n_s_predict,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_base)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1325, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_predict)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1325, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("online_data_predict", 1, 2, 2, 1); __PYX_ERR(0, 1325, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "online_data_predict") < 0)) __PYX_ERR(0, 1325, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_base = ((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)values[0]);
    __pyx_v_predict = ((struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("online_data_predict", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1325, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.online_data_predict", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_base), __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader, 1, "base", 0))) __PYX_ERR(0, 1326, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_predict), __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader, 1, "predict", 0))) __PYX_ERR(0, 1327, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_18online_data_predict(__pyx_self, __pyx_v_base, __pyx_v_predict);

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

static PyObject *__pyx_pf_6pytact_11data_reader_18online_data_predict(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_base, struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader *__pyx_v_predict) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("online_data_predict", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1325, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_base = __pyx_v_base;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_base);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_base);
  __pyx_cur_scope->__pyx_v_predict = __pyx_v_predict;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_predict);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_predict);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_20generator7, __pyx_codeobj__19, (PyObject *) __pyx_cur_scope, __pyx_n_s_online_data_predict, __pyx_n_s_online_data_predict, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1325, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.online_data_predict", __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_6pytact_11data_reader_20generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PredictionProtocol::Request::Predict::Reader __pyx_t_1;
  struct __pyx_t_6pytact_11data_reader_GraphIndex __pyx_t_2;
  Graph::Reader __pyx_t_3;
   ::capnp::List<Graph::Node, ::capnp::Kind::STRUCT>::Reader __pyx_t_4;
   ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  std::vector<uint32_t>  __pyx_t_8;
  ProofState::Reader __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("online_data_predict", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L4_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, 1325, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1339
 *     # method of keeping the object around should be found.A
 *     # This makes a copy
 *     cdef C_PredictionProtocol_Request_Predict_Reader p = predict.source             # <<<<<<<<<<<<<<
 *     cdef GraphIndex graph_index = base.graph_index
 *     graph_index.nodes.push_back(p.getGraph().getNodes())
 */
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_predict->source;
  __pyx_cur_scope->__pyx_v_p = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_1);

  /* "pytact/data_reader.pyx":1340
 *     # This makes a copy
 *     cdef C_PredictionProtocol_Request_Predict_Reader p = predict.source
 *     cdef GraphIndex graph_index = base.graph_index             # <<<<<<<<<<<<<<
 *     graph_index.nodes.push_back(p.getGraph().getNodes())
 *     graph_index.edges.push_back(p.getGraph().getEdges())
 */
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_base->graph_index;
  __pyx_cur_scope->__pyx_v_graph_index = __pyx_t_2;

  /* "pytact/data_reader.pyx":1341
 *     cdef C_PredictionProtocol_Request_Predict_Reader p = predict.source
 *     cdef GraphIndex graph_index = base.graph_index
 *     graph_index.nodes.push_back(p.getGraph().getNodes())             # <<<<<<<<<<<<<<
 *     graph_index.edges.push_back(p.getGraph().getEdges())
 *     graph_index.representatives.push_back(p.getGraph().getNodes().size())
 */
  try {
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_p.getGraph();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1341, __pyx_L1_error)
  }
  try {
    __pyx_t_4 = __pyx_t_3.getNodes();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1341, __pyx_L1_error)
  }
  try {
    __pyx_cur_scope->__pyx_v_graph_index.nodes.push_back(__pyx_t_4);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1341, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1342
 *     cdef GraphIndex graph_index = base.graph_index
 *     graph_index.nodes.push_back(p.getGraph().getNodes())
 *     graph_index.edges.push_back(p.getGraph().getEdges())             # <<<<<<<<<<<<<<
 *     graph_index.representatives.push_back(p.getGraph().getNodes().size())
 *     graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))
 */
  try {
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_p.getGraph();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1342, __pyx_L1_error)
  }
  try {
    __pyx_t_5 = __pyx_t_3.getEdges();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1342, __pyx_L1_error)
  }
  try {
    __pyx_cur_scope->__pyx_v_graph_index.edges.push_back(__pyx_t_5);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1342, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1343
 *     graph_index.nodes.push_back(p.getGraph().getNodes())
 *     graph_index.edges.push_back(p.getGraph().getEdges())
 *     graph_index.representatives.push_back(p.getGraph().getNodes().size())             # <<<<<<<<<<<<<<
 *     graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))
 *     yield ProofState.init(predict.source.getState(), graph_index.nodes.size() - 1, &graph_index)
 */
  try {
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_p.getGraph();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1343, __pyx_L1_error)
  }
  try {
    __pyx_t_4 = __pyx_t_3.getNodes();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1343, __pyx_L1_error)
  }
  try {
    __pyx_cur_scope->__pyx_v_graph_index.representatives.push_back(__pyx_t_4.size());
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1343, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1344
 *     graph_index.edges.push_back(p.getGraph().getEdges())
 *     graph_index.representatives.push_back(p.getGraph().getNodes().size())
 *     graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))             # <<<<<<<<<<<<<<
 *     yield ProofState.init(predict.source.getState(), graph_index.nodes.size() - 1, &graph_index)
 * 
 */
  __pyx_t_6 = __Pyx_PyInt_FromSize_t(__pyx_cur_scope->__pyx_v_graph_index.nodes.size()); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_reversed, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_8 = __pyx_convert_vector_from_py_uint32_t(__pyx_t_6); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  try {
    __pyx_cur_scope->__pyx_v_graph_index.local_to_global.push_back(__pyx_t_8);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1344, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1345
 *     graph_index.representatives.push_back(p.getGraph().getNodes().size())
 *     graph_index.local_to_global.push_back(reversed(range(graph_index.nodes.size())))
 *     yield ProofState.init(predict.source.getState(), graph_index.nodes.size() - 1, &graph_index)             # <<<<<<<<<<<<<<
 * 
 * @dataclass
 */
  try {
    __pyx_t_9 = __pyx_cur_scope->__pyx_v_predict->source.getState();
  } catch(...) {
    reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
    __PYX_ERR(0, 1345, __pyx_L1_error)
  }
  __pyx_t_6 = __pyx_f_6pytact_11data_reader_10ProofState_init(__PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_9), (__pyx_cur_scope->__pyx_v_graph_index.nodes.size() - 1), (&__pyx_cur_scope->__pyx_v_graph_index)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 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_L4_resume_from_yield:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1345, __pyx_L1_error)
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1325
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_data_predict(OnlineDefinitionsReader base,
 *                         PredictionProtocol_Request_Predict_Reader predict) -> Generator[ProofState, None, None]:
 */

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("online_data_predict", __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;
}

/* "pytact/data_reader.pyx":1384
 *                                     None]
 * 
 * def convert_predictions(preds, stack_size):             # <<<<<<<<<<<<<<
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_22convert_predictions(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_22convert_predictions = {"convert_predictions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_22convert_predictions, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_22convert_predictions(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_preds = 0;
  PyObject *__pyx_v_stack_size = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("convert_predictions (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_preds,&__pyx_n_s_stack_size,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_preds,&__pyx_n_s_stack_size,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_preds)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1384, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_stack_size)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1384, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("convert_predictions", 1, 2, 2, 1); __PYX_ERR(0, 1384, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "convert_predictions") < 0)) __PYX_ERR(0, 1384, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_preds = values[0];
    __pyx_v_stack_size = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("convert_predictions", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1384, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.convert_predictions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_21convert_predictions(__pyx_self, __pyx_v_preds, __pyx_v_stack_size);

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

static PyObject *__pyx_pf_6pytact_11data_reader_21convert_predictions(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_preds, PyObject *__pyx_v_stack_size) {
  PyObject *__pyx_8genexpr8__pyx_v_pred = NULL;
  PyObject *__pyx_8genexpr9__pyx_v_pred = NULL;
  PyObject *__pyx_9genexpr10__pyx_v_a = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  PyObject *(*__pyx_t_11)(PyObject *);
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("convert_predictions", 0);
  __Pyx_INCREF(__pyx_v_preds);

  /* "pytact/data_reader.pyx":1385
 * 
 * def convert_predictions(preds, stack_size):
 *     if isinstance(preds, TacticPredictionsText):             # <<<<<<<<<<<<<<
 *         preds = [{'tacticText': pred.tactic_text,
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_TacticPredictionsText); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_preds, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1385, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "pytact/data_reader.pyx":1386
 * def convert_predictions(preds, stack_size):
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,             # <<<<<<<<<<<<<<
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 */
    { /* enter inner scope */
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1386, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_1);

      /* "pytact/data_reader.pyx":1387
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,
 *                   'confidence': pred.confidence} for pred in preds.predictions]             # <<<<<<<<<<<<<<
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 *     elif isinstance(preds, TacticPredictionsGraph):
 */
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_preds, __pyx_n_s_predictions); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1387, __pyx_L6_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
        __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1387, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1387, __pyx_L6_error)
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1387, __pyx_L6_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1387, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1387, __pyx_L6_error)
            #else
            __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1387, __pyx_L6_error)
            __Pyx_GOTREF(__pyx_t_3);
            #endif
          }
        } else {
          __pyx_t_3 = __pyx_t_6(__pyx_t_4);
          if (unlikely(!__pyx_t_3)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 1387, __pyx_L6_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_3);
        }
        __Pyx_XDECREF_SET(__pyx_8genexpr8__pyx_v_pred, __pyx_t_3);
        __pyx_t_3 = 0;

        /* "pytact/data_reader.pyx":1386
 * def convert_predictions(preds, stack_size):
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,             # <<<<<<<<<<<<<<
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 */
        __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1386, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr8__pyx_v_pred, __pyx_n_s_tactic_text); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1386, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_tacticText, __pyx_t_7) < 0) __PYX_ERR(0, 1386, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

        /* "pytact/data_reader.pyx":1387
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,
 *                   'confidence': pred.confidence} for pred in preds.predictions]             # <<<<<<<<<<<<<<
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 *     elif isinstance(preds, TacticPredictionsGraph):
 */
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr8__pyx_v_pred, __pyx_n_s_confidence); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1387, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_confidence, __pyx_t_7) < 0) __PYX_ERR(0, 1386, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 1386, __pyx_L6_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_pred); __pyx_8genexpr8__pyx_v_pred = 0;
      goto __pyx_L9_exit_scope;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_pred); __pyx_8genexpr8__pyx_v_pred = 0;
      goto __pyx_L1_error;
      __pyx_L9_exit_scope:;
    } /* exit inner scope */
    __Pyx_DECREF_SET(__pyx_v_preds, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":1388
 *         preds = [{'tacticText': pred.tactic_text,
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)             # <<<<<<<<<<<<<<
 *     elif isinstance(preds, TacticPredictionsGraph):
 *         preds = [{'tactic': {'ident': pred.ident},
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Response); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_new_message); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_textPrediction, __pyx_v_preds) < 0) __PYX_ERR(0, 1388, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1385
 * 
 * def convert_predictions(preds, stack_size):
 *     if isinstance(preds, TacticPredictionsText):             # <<<<<<<<<<<<<<
 *         preds = [{'tacticText': pred.tactic_text,
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 */
  }

  /* "pytact/data_reader.pyx":1389
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 *     elif isinstance(preds, TacticPredictionsGraph):             # <<<<<<<<<<<<<<
 *         preds = [{'tactic': {'ident': pred.ident},
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_TacticPredictionsGraph); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_preds, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1389, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (likely(__pyx_t_2)) {

    /* "pytact/data_reader.pyx":1390
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 *     elif isinstance(preds, TacticPredictionsGraph):
 *         preds = [{'tactic': {'ident': pred.ident},             # <<<<<<<<<<<<<<
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,
 *                                            'nodeIndex': a.nodeid}}
 */
    { /* enter inner scope */
      __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1390, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_3);

      /* "pytact/data_reader.pyx":1394
 *                                            'nodeIndex': a.nodeid}}
 *                             for a in pred.arguments],
 *                   'confidence': pred.confidence} for pred in preds.predictions]             # <<<<<<<<<<<<<<
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(prediction=preds)
 *     else:
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_preds, __pyx_n_s_predictions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1394, __pyx_L12_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
        __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
        __pyx_t_6 = NULL;
      } else {
        __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1394, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1394, __pyx_L12_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (likely(!__pyx_t_6)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1394, __pyx_L12_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1394, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          } else {
            if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1394, __pyx_L12_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1394, __pyx_L12_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          }
        } else {
          __pyx_t_1 = __pyx_t_6(__pyx_t_4);
          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, 1394, __pyx_L12_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XDECREF_SET(__pyx_8genexpr9__pyx_v_pred, __pyx_t_1);
        __pyx_t_1 = 0;

        /* "pytact/data_reader.pyx":1390
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 *     elif isinstance(preds, TacticPredictionsGraph):
 *         preds = [{'tactic': {'ident': pred.ident},             # <<<<<<<<<<<<<<
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,
 *                                            'nodeIndex': a.nodeid}}
 */
        __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr9__pyx_v_pred, __pyx_n_s_ident); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_8);
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_u_ident, __pyx_t_8) < 0) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_tactic, __pyx_t_7) < 0) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        { /* enter inner scope */

          /* "pytact/data_reader.pyx":1391
 *     elif isinstance(preds, TacticPredictionsGraph):
 *         preds = [{'tactic': {'ident': pred.ident},
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,             # <<<<<<<<<<<<<<
 *                                            'nodeIndex': a.nodeid}}
 *                             for a in pred.arguments],
 */
          __pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1391, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_7);

          /* "pytact/data_reader.pyx":1393
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,
 *                                            'nodeIndex': a.nodeid}}
 *                             for a in pred.arguments],             # <<<<<<<<<<<<<<
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(prediction=preds)
 */
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr9__pyx_v_pred, __pyx_n_s_arguments); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1393, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (likely(PyList_CheckExact(__pyx_t_8)) || PyTuple_CheckExact(__pyx_t_8)) {
            __pyx_t_9 = __pyx_t_8; __Pyx_INCREF(__pyx_t_9); __pyx_t_10 = 0;
            __pyx_t_11 = NULL;
          } else {
            __pyx_t_10 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1393, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_11 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1393, __pyx_L17_error)
          }
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          for (;;) {
            if (likely(!__pyx_t_11)) {
              if (likely(PyList_CheckExact(__pyx_t_9))) {
                if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_9)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_8 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_8); __pyx_t_10++; if (unlikely((0 < 0))) __PYX_ERR(0, 1393, __pyx_L17_error)
                #else
                __pyx_t_8 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1393, __pyx_L17_error)
                __Pyx_GOTREF(__pyx_t_8);
                #endif
              } else {
                if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_10); __Pyx_INCREF(__pyx_t_8); __pyx_t_10++; if (unlikely((0 < 0))) __PYX_ERR(0, 1393, __pyx_L17_error)
                #else
                __pyx_t_8 = PySequence_ITEM(__pyx_t_9, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1393, __pyx_L17_error)
                __Pyx_GOTREF(__pyx_t_8);
                #endif
              }
            } else {
              __pyx_t_8 = __pyx_t_11(__pyx_t_9);
              if (unlikely(!__pyx_t_8)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 1393, __pyx_L17_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_8);
            }
            __Pyx_XDECREF_SET(__pyx_9genexpr10__pyx_v_a, __pyx_t_8);
            __pyx_t_8 = 0;

            /* "pytact/data_reader.pyx":1391
 *     elif isinstance(preds, TacticPredictionsGraph):
 *         preds = [{'tactic': {'ident': pred.ident},
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,             # <<<<<<<<<<<<<<
 *                                            'nodeIndex': a.nodeid}}
 *                             for a in pred.arguments],
 */
            __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_12 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr10__pyx_v_a, __pyx_n_s_graph); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_13);
            __pyx_t_14 = PyNumber_Subtract(__pyx_v_stack_size, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_depIndex, __pyx_t_14) < 0) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;

            /* "pytact/data_reader.pyx":1392
 *         preds = [{'tactic': {'ident': pred.ident},
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,
 *                                            'nodeIndex': a.nodeid}}             # <<<<<<<<<<<<<<
 *                             for a in pred.arguments],
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 */
            __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_9genexpr10__pyx_v_a, __pyx_n_s_nodeid); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1392, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_14);
            if (PyDict_SetItem(__pyx_t_12, __pyx_n_u_nodeIndex, __pyx_t_14) < 0) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            if (PyDict_SetItem(__pyx_t_8, __pyx_n_u_term, __pyx_t_12) < 0) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 1391, __pyx_L17_error)
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

            /* "pytact/data_reader.pyx":1393
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,
 *                                            'nodeIndex': a.nodeid}}
 *                             for a in pred.arguments],             # <<<<<<<<<<<<<<
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(prediction=preds)
 */
          }
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_a); __pyx_9genexpr10__pyx_v_a = 0;
          goto __pyx_L20_exit_scope;
          __pyx_L17_error:;
          __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_a); __pyx_9genexpr10__pyx_v_a = 0;
          goto __pyx_L12_error;
          __pyx_L20_exit_scope:;
        } /* exit inner scope */
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_arguments, __pyx_t_7) < 0) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

        /* "pytact/data_reader.pyx":1394
 *                                            'nodeIndex': a.nodeid}}
 *                             for a in pred.arguments],
 *                   'confidence': pred.confidence} for pred in preds.predictions]             # <<<<<<<<<<<<<<
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(prediction=preds)
 *     else:
 */
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_8genexpr9__pyx_v_pred, __pyx_n_s_confidence); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1394, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_confidence, __pyx_t_7) < 0) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 1390, __pyx_L12_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_pred); __pyx_8genexpr9__pyx_v_pred = 0;
      goto __pyx_L21_exit_scope;
      __pyx_L12_error:;
      __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_pred); __pyx_8genexpr9__pyx_v_pred = 0;
      goto __pyx_L1_error;
      __pyx_L21_exit_scope:;
    } /* exit inner scope */
    __Pyx_DECREF_SET(__pyx_v_preds, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":1395
 *                             for a in pred.arguments],
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(prediction=preds)             # <<<<<<<<<<<<<<
 *     else:
 *         raise Exception("Incorrect predictions received")
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Response); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_new_message); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_prediction, __pyx_v_preds) < 0) __PYX_ERR(0, 1395, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1389
 *                   'confidence': pred.confidence} for pred in preds.predictions]
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(textPrediction=preds)
 *     elif isinstance(preds, TacticPredictionsGraph):             # <<<<<<<<<<<<<<
 *         preds = [{'tactic': {'ident': pred.ident},
 *                   'arguments': [{'term' : {'depIndex': stack_size - a.graph,
 */
  }

  /* "pytact/data_reader.pyx":1397
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(prediction=preds)
 *     else:
 *         raise Exception("Incorrect predictions received")             # <<<<<<<<<<<<<<
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (
 */
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1397, __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, 1397, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1384
 *                                     None]
 * 
 * def convert_predictions(preds, stack_size):             # <<<<<<<<<<<<<<
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("pytact.data_reader.convert_predictions", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_8genexpr8__pyx_v_pred);
  __Pyx_XDECREF(__pyx_8genexpr9__pyx_v_pred);
  __Pyx_XDECREF(__pyx_9genexpr10__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_preds);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_25generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1399
 *         raise Exception("Incorrect predictions received")
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_24capnp_message_generator_lowlevel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_23capnp_message_generator_lowlevel, "A generator that facilitates communication between a prediction server and a Coq process.\n\n    Given a `socket`, this function creates a generator that yields messages of type\n    `pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader` after which a\n    `capnp.lib.capnp._DynamicStructBuilder` message needs to be `send` back.\n\n    When `record` is passed a file descriptor, all received and sent messages will be dumped into that file\n    descriptor. These messages can then be replayed later using `capnp_message_generator_from_file`.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_24capnp_message_generator_lowlevel = {"capnp_message_generator_lowlevel", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_24capnp_message_generator_lowlevel, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_23capnp_message_generator_lowlevel};
static PyObject *__pyx_pw_6pytact_11data_reader_24capnp_message_generator_lowlevel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_socket = 0;
  PyObject *__pyx_v_record = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("capnp_message_generator_lowlevel (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_socket,&__pyx_n_s_record,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_socket,&__pyx_n_s_record,0};
    #endif
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_socket)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1399, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1399, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "capnp_message_generator_lowlevel") < 0)) __PYX_ERR(0, 1399, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_socket = values[0];
    __pyx_v_record = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("capnp_message_generator_lowlevel", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1399, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.capnp_message_generator_lowlevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_23capnp_message_generator_lowlevel(__pyx_self, __pyx_v_socket, __pyx_v_record);

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

static PyObject *__pyx_pf_6pytact_11data_reader_23capnp_message_generator_lowlevel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_socket, PyObject *__pyx_v_record) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("capnp_message_generator_lowlevel", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1399, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_socket = __pyx_v_socket;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_socket);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_socket);
  __pyx_cur_scope->__pyx_v_record = __pyx_v_record;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_record);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_record);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_25generator8, __pyx_codeobj__21, (PyObject *) __pyx_cur_scope, __pyx_n_s_capnp_message_generator_lowlevel, __pyx_n_s_capnp_message_generator_lowlevel, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1399, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.capnp_message_generator_lowlevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1413
 *     reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         socket, traversal_limit_in_words=2**64-1)
 *     def next_disabled_sigint():             # <<<<<<<<<<<<<<
 *         """
 *         A variant of `next` that disables Python's sigkill signal handler while waiting for new messages.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_32capnp_message_generator_lowlevel_1next_disabled_sigint(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_32capnp_message_generator_lowlevel_next_disabled_sigint, "\n        A variant of `next` that disables Python's sigkill signal handler while waiting for new messages.\n        Without this, the reader will block and can't be killed with Cntl+C until it receives a message.\n\n        See the following upstream capnp issue for further explanations:\n        https://github.com/capnproto/capnproto/issues/1542\n\n        Note that the proper solution to this is to read messages in async mode, but pycapnp currently doesn't\n        support this.\n        ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_32capnp_message_generator_lowlevel_1next_disabled_sigint = {"next_disabled_sigint", (PyCFunction)__pyx_pw_6pytact_11data_reader_32capnp_message_generator_lowlevel_1next_disabled_sigint, METH_NOARGS, __pyx_doc_6pytact_11data_reader_32capnp_message_generator_lowlevel_next_disabled_sigint};
static PyObject *__pyx_pw_6pytact_11data_reader_32capnp_message_generator_lowlevel_1next_disabled_sigint(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("next_disabled_sigint (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_32capnp_message_generator_lowlevel_next_disabled_sigint(__pyx_self);

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

static PyObject *__pyx_pf_6pytact_11data_reader_32capnp_message_generator_lowlevel_next_disabled_sigint(PyObject *__pyx_self) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *__pyx_cur_scope;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *__pyx_outer_scope;
  PyObject *__pyx_v_prev_sig = NULL;
  PyObject *__pyx_v_msg = 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;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("next_disabled_sigint", 0);
  __pyx_outer_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;

  /* "pytact/data_reader.pyx":1424
 *         support this.
 *         """
 *         if threading.current_thread() is threading.main_thread():             # <<<<<<<<<<<<<<
 *             prev_sig = signal.signal(signal.SIGINT, signal.SIG_DFL)  # SIGINT catching OFF
 *             msg = next(reader, None)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_current_thread); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_2, };
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1424, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_threading); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_main_thread); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_2, };
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1424, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __pyx_t_6 = (__pyx_t_1 == __pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_6) {

    /* "pytact/data_reader.pyx":1425
 *         """
 *         if threading.current_thread() is threading.main_thread():
 *             prev_sig = signal.signal(signal.SIGINT, signal.SIG_DFL)  # SIGINT catching OFF             # <<<<<<<<<<<<<<
 *             msg = next(reader, None)
 *             signal.signal(signal.SIGINT, prev_sig)  # SIGINT catching ON
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_signal); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_signal); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_signal); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SIGINT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_signal); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SIG_DFL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1425, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_2, __pyx_t_7};
      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_v_prev_sig = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":1426
 *         if threading.current_thread() is threading.main_thread():
 *             prev_sig = signal.signal(signal.SIGINT, signal.SIG_DFL)  # SIGINT catching OFF
 *             msg = next(reader, None)             # <<<<<<<<<<<<<<
 *             signal.signal(signal.SIGINT, prev_sig)  # SIGINT catching ON
 *             return msg
 */
    if (unlikely(!__pyx_cur_scope->__pyx_v_reader)) { __Pyx_RaiseClosureNameError("reader"); __PYX_ERR(0, 1426, __pyx_L1_error) }
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_reader;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyIter_Next2(__pyx_t_3, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1426, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_msg = __pyx_t_5;
    __pyx_t_5 = 0;

    /* "pytact/data_reader.pyx":1427
 *             prev_sig = signal.signal(signal.SIGINT, signal.SIG_DFL)  # SIGINT catching OFF
 *             msg = next(reader, None)
 *             signal.signal(signal.SIGINT, prev_sig)  # SIGINT catching ON             # <<<<<<<<<<<<<<
 *             return msg
 *         else:
 */
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_signal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_signal); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_signal); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_SIGINT); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1427, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_4 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
        __pyx_t_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_t_2, __pyx_v_prev_sig};
      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1427, __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;

    /* "pytact/data_reader.pyx":1428
 *             msg = next(reader, None)
 *             signal.signal(signal.SIGINT, prev_sig)  # SIGINT catching ON
 *             return msg             # <<<<<<<<<<<<<<
 *         else:
 *             return next(reader, None)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_msg);
    __pyx_r = __pyx_v_msg;
    goto __pyx_L0;

    /* "pytact/data_reader.pyx":1424
 *         support this.
 *         """
 *         if threading.current_thread() is threading.main_thread():             # <<<<<<<<<<<<<<
 *             prev_sig = signal.signal(signal.SIGINT, signal.SIG_DFL)  # SIGINT catching OFF
 *             msg = next(reader, None)
 */
  }

  /* "pytact/data_reader.pyx":1430
 *             return msg
 *         else:
 *             return next(reader, None)             # <<<<<<<<<<<<<<
 *     msg = next_disabled_sigint()
 *     while msg is not None:
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (unlikely(!__pyx_cur_scope->__pyx_v_reader)) { __Pyx_RaiseClosureNameError("reader"); __PYX_ERR(0, 1430, __pyx_L1_error) }
    __pyx_t_5 = __pyx_cur_scope->__pyx_v_reader;
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyIter_Next2(__pyx_t_5, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":1413
 *     reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         socket, traversal_limit_in_words=2**64-1)
 *     def next_disabled_sigint():             # <<<<<<<<<<<<<<
 *         """
 *         A variant of `next` that disables Python's sigkill signal handler while waiting for new messages.
 */

  /* 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_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("pytact.data_reader.capnp_message_generator_lowlevel.next_disabled_sigint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_prev_sig);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1399
 *         raise Exception("Incorrect predictions received")
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */

static PyObject *__pyx_gb_6pytact_11data_reader_25generator8(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("capnp_message_generator_lowlevel", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L7_resume_from_yield;
    case 2: 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, 1399, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1411
 *     descriptor. These messages can then be replayed later using `capnp_message_generator_from_file`.
 *     """
 *     reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(             # <<<<<<<<<<<<<<
 *         socket, traversal_limit_in_words=2**64-1)
 *     def next_disabled_sigint():
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Request); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_read_multiple_packed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1412
 *     """
 *     reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         socket, traversal_limit_in_words=2**64-1)             # <<<<<<<<<<<<<<
 *     def next_disabled_sigint():
 *         """
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_socket);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_socket);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_socket);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_traversal_limit_in_words, __pyx_int_18446744073709551615) < 0) __PYX_ERR(0, 1412, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1411
 *     descriptor. These messages can then be replayed later using `capnp_message_generator_from_file`.
 *     """
 *     reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(             # <<<<<<<<<<<<<<
 *         socket, traversal_limit_in_words=2**64-1)
 *     def next_disabled_sigint():
 */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_reader = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "pytact/data_reader.pyx":1413
 *     reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         socket, traversal_limit_in_words=2**64-1)
 *     def next_disabled_sigint():             # <<<<<<<<<<<<<<
 *         """
 *         A variant of `next` that disables Python's sigkill signal handler while waiting for new messages.
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_32capnp_message_generator_lowlevel_1next_disabled_sigint, 0, __pyx_n_s_capnp_message_generator_lowlevel_2, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__23)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_next_disabled_sigint = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "pytact/data_reader.pyx":1431
 *         else:
 *             return next(reader, None)
 *     msg = next_disabled_sigint()             # <<<<<<<<<<<<<<
 *     while msg is not None:
 *         if record is not None:
 */
  __pyx_t_4 = __pyx_pf_6pytact_11data_reader_32capnp_message_generator_lowlevel_next_disabled_sigint(__pyx_cur_scope->__pyx_v_next_disabled_sigint); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_msg = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "pytact/data_reader.pyx":1432
 *             return next(reader, None)
 *     msg = next_disabled_sigint()
 *     while msg is not None:             # <<<<<<<<<<<<<<
 *         if record is not None:
 *             msg.as_builder().write_packed(record)
 */
  while (1) {
    __pyx_t_5 = (__pyx_cur_scope->__pyx_v_msg != Py_None);
    if (!__pyx_t_5) break;

    /* "pytact/data_reader.pyx":1433
 *     msg = next_disabled_sigint()
 *     while msg is not None:
 *         if record is not None:             # <<<<<<<<<<<<<<
 *             msg.as_builder().write_packed(record)
 *         cython_msg = PredictionProtocol_Request_Reader(msg)
 */
    __pyx_t_5 = (__pyx_cur_scope->__pyx_v_record != Py_None);
    if (__pyx_t_5) {

      /* "pytact/data_reader.pyx":1434
 *     while msg is not None:
 *         if record is not None:
 *             msg.as_builder().write_packed(record)             # <<<<<<<<<<<<<<
 *         cython_msg = PredictionProtocol_Request_Reader(msg)
 *         response = yield cython_msg
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_as_builder); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_2, };
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1434, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_write_packed); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_record};
        __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1434, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "pytact/data_reader.pyx":1433
 *     msg = next_disabled_sigint()
 *     while msg is not None:
 *         if record is not None:             # <<<<<<<<<<<<<<
 *             msg.as_builder().write_packed(record)
 *         cython_msg = PredictionProtocol_Request_Reader(msg)
 */
    }

    /* "pytact/data_reader.pyx":1435
 *         if record is not None:
 *             msg.as_builder().write_packed(record)
 *         cython_msg = PredictionProtocol_Request_Reader(msg)             # <<<<<<<<<<<<<<
 *         response = yield cython_msg
 *         yield
 */
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader), __pyx_cur_scope->__pyx_v_msg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XGOTREF((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cython_msg, ((struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader *)__pyx_t_4));
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;

    /* "pytact/data_reader.pyx":1436
 *             msg.as_builder().write_packed(record)
 *         cython_msg = PredictionProtocol_Request_Reader(msg)
 *         response = yield cython_msg             # <<<<<<<<<<<<<<
 *         yield
 *         response.write_packed(socket)
 */
    __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg);
    __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg);
    __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, 1436, __pyx_L1_error)
    __pyx_t_4 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;

    /* "pytact/data_reader.pyx":1437
 *         cython_msg = PredictionProtocol_Request_Reader(msg)
 *         response = yield cython_msg
 *         yield             # <<<<<<<<<<<<<<
 *         response.write_packed(socket)
 *         if record is not None:
 */
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 2;
    return __pyx_r;
    __pyx_L8_resume_from_yield:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1437, __pyx_L1_error)

    /* "pytact/data_reader.pyx":1438
 *         response = yield cython_msg
 *         yield
 *         response.write_packed(socket)             # <<<<<<<<<<<<<<
 *         if record is not None:
 *             response.clear_write_flag()
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response, __pyx_n_s_write_packed); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_6 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_socket};
      __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1438, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "pytact/data_reader.pyx":1439
 *         yield
 *         response.write_packed(socket)
 *         if record is not None:             # <<<<<<<<<<<<<<
 *             response.clear_write_flag()
 *             response.write_packed(record)
 */
    __pyx_t_5 = (__pyx_cur_scope->__pyx_v_record != Py_None);
    if (__pyx_t_5) {

      /* "pytact/data_reader.pyx":1440
 *         response.write_packed(socket)
 *         if record is not None:
 *             response.clear_write_flag()             # <<<<<<<<<<<<<<
 *             response.write_packed(record)
 *         msg = next_disabled_sigint()
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response, __pyx_n_s_clear_write_flag); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1440, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_3, };
        __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1440, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "pytact/data_reader.pyx":1441
 *         if record is not None:
 *             response.clear_write_flag()
 *             response.write_packed(record)             # <<<<<<<<<<<<<<
 *         msg = next_disabled_sigint()
 * 
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response, __pyx_n_s_write_packed); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_record};
        __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1441, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "pytact/data_reader.pyx":1439
 *         yield
 *         response.write_packed(socket)
 *         if record is not None:             # <<<<<<<<<<<<<<
 *             response.clear_write_flag()
 *             response.write_packed(record)
 */
    }

    /* "pytact/data_reader.pyx":1442
 *             response.clear_write_flag()
 *             response.write_packed(record)
 *         msg = next_disabled_sigint()             # <<<<<<<<<<<<<<
 * 
 * def capnp_message_generator_from_file_lowlevel(message_file: BinaryIO, check = True) -> (
 */
    __pyx_t_4 = __pyx_pf_6pytact_11data_reader_32capnp_message_generator_lowlevel_next_disabled_sigint(__pyx_cur_scope->__pyx_v_next_disabled_sigint); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1442, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_msg);
    __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_msg, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1399
 *         raise Exception("Incorrect predictions received")
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */

  /* 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_4);
  __Pyx_AddTraceback("capnp_message_generator_lowlevel", __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;
}
static PyObject *__pyx_gb_6pytact_11data_reader_28generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1444
 *         msg = next_disabled_sigint()
 * 
 * def capnp_message_generator_from_file_lowlevel(message_file: BinaryIO, check = True) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_27capnp_message_generator_from_file_lowlevel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_26capnp_message_generator_from_file_lowlevel, "Replay and verify a pre-recorded communication sequence between Coq and a prediction server.\n\n    Lowlevel variant of `capnp_message_generator_from_file`.\n\n    Accepts a `message_file` containing a stream of Capt'n Proto messages as recorded using\n    `capnp_message_generator(s, record=message_file)`. The resulting generator acts just like the generator\n    created by `capnp_message_generator` except that it is not connected to the socket but just replays the\n    pre-recorded messages. Every responsemessage received by this generator through `send` will be compared against\n    the recorded response and if they differ an error is thrown.\n\n    Arguments:\n    - `check` governs wether or not the response messages will be compared against recorded messages\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_27capnp_message_generator_from_file_lowlevel = {"capnp_message_generator_from_file_lowlevel", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_27capnp_message_generator_from_file_lowlevel, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_26capnp_message_generator_from_file_lowlevel};
static PyObject *__pyx_pw_6pytact_11data_reader_27capnp_message_generator_from_file_lowlevel(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_message_file = 0;
  PyObject *__pyx_v_check = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("capnp_message_generator_from_file_lowlevel (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message_file,&__pyx_n_s_check,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message_file,&__pyx_n_s_check,0};
    #endif
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_True));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message_file)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1444, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_check);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1444, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "capnp_message_generator_from_file_lowlevel") < 0)) __PYX_ERR(0, 1444, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_message_file = values[0];
    __pyx_v_check = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("capnp_message_generator_from_file_lowlevel", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1444, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.capnp_message_generator_from_file_lowlevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_26capnp_message_generator_from_file_lowlevel(__pyx_self, __pyx_v_message_file, __pyx_v_check);

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

static PyObject *__pyx_pf_6pytact_11data_reader_26capnp_message_generator_from_file_lowlevel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message_file, PyObject *__pyx_v_check) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("capnp_message_generator_from_file_lowlevel", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1444, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_message_file = __pyx_v_message_file;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message_file);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message_file);
  __pyx_cur_scope->__pyx_v_check = __pyx_v_check;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_check);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_check);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_28generator9, __pyx_codeobj__24, (PyObject *) __pyx_cur_scope, __pyx_n_s_capnp_message_generator_from_fil, __pyx_n_s_capnp_message_generator_from_fil, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1444, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.capnp_message_generator_from_file_lowlevel", __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_6pytact_11data_reader_28generator9(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  int __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_UCS4 __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("capnp_message_generator_from_file_lowlevel", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L6_resume_from_yield;
    case 2: 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, 1444, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1460
 *     - `check` governs wether or not the response messages will be compared against recorded messages
 *     """
 *     message_reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(             # <<<<<<<<<<<<<<
 *         message_file, traversal_limit_in_words=2**64-1)
 *     for request in message_reader:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Request); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_read_multiple_packed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1461
 *     """
 *     message_reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         message_file, traversal_limit_in_words=2**64-1)             # <<<<<<<<<<<<<<
 *     for request in message_reader:
 *         cython_msg = PredictionProtocol_Request_Reader(request)
 */
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_message_file);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_message_file);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_cur_scope->__pyx_v_message_file);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_traversal_limit_in_words, __pyx_int_18446744073709551615) < 0) __PYX_ERR(0, 1461, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1460
 *     - `check` governs wether or not the response messages will be compared against recorded messages
 *     """
 *     message_reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(             # <<<<<<<<<<<<<<
 *         message_file, traversal_limit_in_words=2**64-1)
 *     for request in message_reader:
 */
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_4);
  __pyx_cur_scope->__pyx_v_message_reader = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "pytact/data_reader.pyx":1462
 *     message_reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         message_file, traversal_limit_in_words=2**64-1)
 *     for request in message_reader:             # <<<<<<<<<<<<<<
 *         cython_msg = PredictionProtocol_Request_Reader(request)
 *         response = yield cython_msg
 */
  if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_v_message_reader)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_v_message_reader)) {
    __pyx_t_4 = __pyx_cur_scope->__pyx_v_message_reader; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_cur_scope->__pyx_v_message_reader); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1462, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1462, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1462, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1462, __pyx_L1_error)
        #else
        __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1462, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        #endif
      }
    } else {
      __pyx_t_3 = __pyx_t_6(__pyx_t_4);
      if (unlikely(!__pyx_t_3)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1462, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_3);
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_request);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_request, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":1463
 *         message_file, traversal_limit_in_words=2**64-1)
 *     for request in message_reader:
 *         cython_msg = PredictionProtocol_Request_Reader(request)             # <<<<<<<<<<<<<<
 *         response = yield cython_msg
 *         yield
 */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader), __pyx_cur_scope->__pyx_v_request); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1463, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XGOTREF((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_cython_msg, ((struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader *)__pyx_t_3));
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":1464
 *     for request in message_reader:
 *         cython_msg = PredictionProtocol_Request_Reader(request)
 *         response = yield cython_msg             # <<<<<<<<<<<<<<
 *         yield
 *         # A bit of a hack, we temporarily change the schema of the reader to `Response`
 */
    __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg);
    __pyx_r = ((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg);
    __Pyx_XGIVEREF(__pyx_t_4);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
    __pyx_cur_scope->__pyx_t_2 = __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_L6_resume_from_yield:;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_4);
    __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1464, __pyx_L1_error)
    __pyx_t_3 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":1465
 *         cython_msg = PredictionProtocol_Request_Reader(request)
 *         response = yield cython_msg
 *         yield             # <<<<<<<<<<<<<<
 *         # A bit of a hack, we temporarily change the schema of the reader to `Response`
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Response.schema
 */
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    __Pyx_XGIVEREF(__pyx_t_4);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_4;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_5;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_6;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 2;
    return __pyx_r;
    __pyx_L7_resume_from_yield:;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_4);
    __pyx_t_5 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_6 = __pyx_cur_scope->__pyx_t_2;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1465, __pyx_L1_error)

    /* "pytact/data_reader.pyx":1467
 *         yield
 *         # A bit of a hack, we temporarily change the schema of the reader to `Response`
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Response.schema             # <<<<<<<<<<<<<<
 *         recorded_response = next(message_reader)
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Request.schema
 */
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Response); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_schema); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1467, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_message_reader, __pyx_n_s_schema, __pyx_t_1) < 0) __PYX_ERR(0, 1467, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":1468
 *         # A bit of a hack, we temporarily change the schema of the reader to `Response`
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Response.schema
 *         recorded_response = next(message_reader)             # <<<<<<<<<<<<<<
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Request.schema
 *         if check:
 */
    __pyx_t_1 = __Pyx_PyIter_Next(__pyx_cur_scope->__pyx_v_message_reader); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1468, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_recorded_response);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_recorded_response, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_1);
    __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":1469
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Response.schema
 *         recorded_response = next(message_reader)
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Request.schema             # <<<<<<<<<<<<<<
 *         if check:
 *             if response.to_dict() == recorded_response.to_dict():
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_Request); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_schema); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_cur_scope->__pyx_v_message_reader, __pyx_n_s_schema, __pyx_t_3) < 0) __PYX_ERR(0, 1469, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":1470
 *         recorded_response = next(message_reader)
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Request.schema
 *         if check:             # <<<<<<<<<<<<<<
 *             if response.to_dict() == recorded_response.to_dict():
 *                 print(f'The servers response to a {cython_msg.which.name} message was equal to the '
 */
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_check); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1470, __pyx_L1_error)
    if (__pyx_t_7) {

      /* "pytact/data_reader.pyx":1471
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Request.schema
 *         if check:
 *             if response.to_dict() == recorded_response.to_dict():             # <<<<<<<<<<<<<<
 *                 print(f'The servers response to a {cython_msg.which.name} message was equal to the '
 *                       f'recorded response')
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_response, __pyx_n_s_to_dict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_8 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_2, };
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1471, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_recorded_response, __pyx_n_s_to_dict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_9 = NULL;
      __pyx_t_8 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_8 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_9, };
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 0+__pyx_t_8);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1471, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1471, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (likely(__pyx_t_7)) {

        /* "pytact/data_reader.pyx":1472
 *         if check:
 *             if response.to_dict() == recorded_response.to_dict():
 *                 print(f'The servers response to a {cython_msg.which.name} message was equal to the '             # <<<<<<<<<<<<<<
 *                       f'recorded response')
 *             else:
 */
        __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_10 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_The_servers_response_to_a);
        __pyx_t_10 += 26;
        __Pyx_GIVEREF(__pyx_kp_u_The_servers_response_to_a);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_The_servers_response_to_a);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg), __pyx_n_s_which); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
        __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_INCREF(__pyx_kp_u_message_was_equal_to_the_record);
        __pyx_t_10 += 43;
        __Pyx_GIVEREF(__pyx_kp_u_message_was_equal_to_the_record);
        PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_message_was_equal_to_the_record);
        __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_print, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1472, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

        /* "pytact/data_reader.pyx":1471
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Request.schema
 *         if check:
 *             if response.to_dict() == recorded_response.to_dict():             # <<<<<<<<<<<<<<
 *                 print(f'The servers response to a {cython_msg.which.name} message was equal to the '
 *                       f'recorded response')
 */
        goto __pyx_L9;
      }

      /* "pytact/data_reader.pyx":1475
 *                       f'recorded response')
 *             else:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     f"The servers response to a {cython_msg.which.name} message was not equal to the " +
 *                     f"recorded response.\n"
 */
      /*else*/ {

        /* "pytact/data_reader.pyx":1476
 *             else:
 *                 raise ValueError(
 *                     f"The servers response to a {cython_msg.which.name} message was not equal to the " +             # <<<<<<<<<<<<<<
 *                     f"recorded response.\n"
 *                     f"Recorded response: {recorded_response}\n"
 */
        __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1476, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_10 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_The_servers_response_to_a);
        __pyx_t_10 += 26;
        __Pyx_GIVEREF(__pyx_kp_u_The_servers_response_to_a);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_The_servers_response_to_a);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_cython_msg), __pyx_n_s_which); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1476, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1476, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1476, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) : __pyx_t_11;
        __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_INCREF(__pyx_kp_u_message_was_not_equal_to_the);
        __pyx_t_10 += 30;
        __Pyx_GIVEREF(__pyx_kp_u_message_was_not_equal_to_the);
        PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_message_was_not_equal_to_the);
        __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1476, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

        /* "pytact/data_reader.pyx":1477
 *                 raise ValueError(
 *                     f"The servers response to a {cython_msg.which.name} message was not equal to the " +
 *                     f"recorded response.\n"             # <<<<<<<<<<<<<<
 *                     f"Recorded response: {recorded_response}\n"
 *                     f"Servers response: {response}\n"
 */
        __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1477, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_10 = 0;
        __pyx_t_11 = 127;
        __Pyx_INCREF(__pyx_kp_u_recorded_response_Recorded_respo);
        __pyx_t_10 += 38;
        __Pyx_GIVEREF(__pyx_kp_u_recorded_response_Recorded_respo);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_recorded_response_Recorded_respo);

        /* "pytact/data_reader.pyx":1478
 *                     f"The servers response to a {cython_msg.which.name} message was not equal to the " +
 *                     f"recorded response.\n"
 *                     f"Recorded response: {recorded_response}\n"             # <<<<<<<<<<<<<<
 *                     f"Servers response: {response}\n"
 *                 )
 */
        __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_recorded_response, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1478, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_11;
        __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __Pyx_INCREF(__pyx_kp_u_Servers_response);
        __pyx_t_10 += 19;
        __Pyx_GIVEREF(__pyx_kp_u_Servers_response);
        PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_Servers_response);

        /* "pytact/data_reader.pyx":1479
 *                     f"recorded response.\n"
 *                     f"Recorded response: {recorded_response}\n"
 *                     f"Servers response: {response}\n"             # <<<<<<<<<<<<<<
 *                 )
 * 
 */
        __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_v_response, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1479, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_11 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_11) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_11;
        __pyx_t_10 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3);
        __pyx_t_3 = 0;
        __Pyx_INCREF(__pyx_kp_u__25);
        __pyx_t_10 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__25);
        PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_kp_u__25);

        /* "pytact/data_reader.pyx":1477
 *                 raise ValueError(
 *                     f"The servers response to a {cython_msg.which.name} message was not equal to the " +
 *                     f"recorded response.\n"             # <<<<<<<<<<<<<<
 *                     f"Recorded response: {recorded_response}\n"
 *                     f"Servers response: {response}\n"
 */
        __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_2, 5, __pyx_t_10, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1477, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

        /* "pytact/data_reader.pyx":1476
 *             else:
 *                 raise ValueError(
 *                     f"The servers response to a {cython_msg.which.name} message was not equal to the " +             # <<<<<<<<<<<<<<
 *                     f"recorded response.\n"
 *                     f"Recorded response: {recorded_response}\n"
 */
        __pyx_t_2 = __Pyx_PyUnicode_ConcatInPlace(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1476, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

        /* "pytact/data_reader.pyx":1475
 *                       f'recorded response')
 *             else:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     f"The servers response to a {cython_msg.which.name} message was not equal to the " +
 *                     f"recorded response.\n"
 */
        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1475, __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(0, 1475, __pyx_L1_error)
      }
      __pyx_L9:;

      /* "pytact/data_reader.pyx":1470
 *         recorded_response = next(message_reader)
 *         message_reader.schema = graph_api_capnp.PredictionProtocol.Request.schema
 *         if check:             # <<<<<<<<<<<<<<
 *             if response.to_dict() == recorded_response.to_dict():
 *                 print(f'The servers response to a {cython_msg.which.name} message was equal to the '
 */
    }

    /* "pytact/data_reader.pyx":1462
 *     message_reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         message_file, traversal_limit_in_words=2**64-1)
 *     for request in message_reader:             # <<<<<<<<<<<<<<
 *         cython_msg = PredictionProtocol_Request_Reader(request)
 *         response = yield cython_msg
 */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1444
 *         msg = next_disabled_sigint()
 * 
 * def capnp_message_generator_from_file_lowlevel(message_file: BinaryIO, check = True) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */

  /* 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_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("capnp_message_generator_from_file_lowlevel", __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;
}
static PyObject *__pyx_gb_6pytact_11data_reader_31generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1483
 * 
 * 
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):             # <<<<<<<<<<<<<<
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_30prediction_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_30prediction_generator = {"prediction_generator", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_30prediction_generator, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_30prediction_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_lgenerator = 0;
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_defs = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("prediction_generator (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lgenerator,&__pyx_n_s_defs,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lgenerator,&__pyx_n_s_defs,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_lgenerator)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1483, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_defs)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1483, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("prediction_generator", 1, 2, 2, 1); __PYX_ERR(0, 1483, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "prediction_generator") < 0)) __PYX_ERR(0, 1483, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_lgenerator = values[0];
    __pyx_v_defs = ((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("prediction_generator", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1483, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.prediction_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_defs), __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader, 1, "defs", 0))) __PYX_ERR(0, 1483, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_29prediction_generator(__pyx_self, __pyx_v_lgenerator, __pyx_v_defs);

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

static PyObject *__pyx_pf_6pytact_11data_reader_29prediction_generator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_lgenerator, struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *__pyx_v_defs) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *__pyx_cur_scope;
  PyObject *__pyx_gb_6pytact_11data_reader_20prediction_generator_2generator13 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("prediction_generator", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1483, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_lgenerator = __pyx_v_lgenerator;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_lgenerator);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_lgenerator);
  __pyx_cur_scope->__pyx_v_defs = __pyx_v_defs;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_defs);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_defs);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_31generator10, __pyx_codeobj__26, (PyObject *) __pyx_cur_scope, __pyx_n_s_prediction_generator, __pyx_n_s_prediction_generator, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1483, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.prediction_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XDECREF(__pyx_gb_6pytact_11data_reader_20prediction_generator_2generator13);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_20prediction_generator_2generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1503
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:
 *                     def prediction_generator_sub():             # <<<<<<<<<<<<<<
 *                         nonlocal msg
 *                         msg = yield from prediction_generator(lgenerator, definitions)
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_20prediction_generator_1prediction_generator_sub(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_20prediction_generator_1prediction_generator_sub = {"prediction_generator_sub", (PyCFunction)__pyx_pw_6pytact_11data_reader_20prediction_generator_1prediction_generator_sub, METH_NOARGS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_20prediction_generator_1prediction_generator_sub(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("prediction_generator_sub (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_20prediction_generator_prediction_generator_sub(__pyx_self);

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

static PyObject *__pyx_pf_6pytact_11data_reader_20prediction_generator_prediction_generator_sub(PyObject *__pyx_self) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("prediction_generator_sub", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1503, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_20prediction_generator_2generator13, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_prediction_generator_sub, __pyx_n_s_prediction_generator_locals_pred, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1503, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.prediction_generator.prediction_generator_sub", __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_6pytact_11data_reader_20prediction_generator_2generator13(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("prediction_generator_sub", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L4_resume_from_yield_from;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1503, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1505
 *                     def prediction_generator_sub():
 *                         nonlocal msg
 *                         msg = yield from prediction_generator(lgenerator, definitions)             # <<<<<<<<<<<<<<
 *                     pg = prediction_generator_sub()
 *                     yield GlobalContextMessage(definitions, init.tactics, init.log_annotation, pg)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_prediction_generator); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_lgenerator)) { __Pyx_RaiseClosureNameError("lgenerator"); __PYX_ERR(0, 1505, __pyx_L1_error) }
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_definitions)) { __Pyx_RaiseClosureNameError("definitions"); __PYX_ERR(0, 1505, __pyx_L1_error) }
  __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;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_lgenerator, __pyx_cur_scope->__pyx_outer_scope->__pyx_v_definitions};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_r = __Pyx_Generator_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __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_L4_resume_from_yield_from:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1505, __pyx_L1_error)
    __pyx_t_1 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_1);
  } else {
    __pyx_t_1 = NULL;
    if (__Pyx_PyGen_FetchStopIterationValue(&__pyx_t_1) < 0) __PYX_ERR(0, 1505, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_XGOTREF(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_msg);
  __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_msg, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1503
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:
 *                     def prediction_generator_sub():             # <<<<<<<<<<<<<<
 *                         nonlocal msg
 *                         msg = yield from prediction_generator(lgenerator, definitions)
 */

  /* 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_AddTraceback("prediction_generator_sub", __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;
}

/* "pytact/data_reader.pyx":1483
 * 
 * 
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):             # <<<<<<<<<<<<<<
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 */

static PyObject *__pyx_gb_6pytact_11data_reader_31generator10(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  Py_UCS4 __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_t_15;
  PyObject *(*__pyx_t_16)(PyObject *);
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("prediction_generator", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L23_resume_from_yield;
    case 2: goto __pyx_L43_resume_from_yield;
    case 3: goto __pyx_L48_resume_from_yield;
    case 4: goto __pyx_L49_resume_from_yield;
    case 5: goto __pyx_L52_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, 1483, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1484
 * 
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):
 *     msg = next(lgenerator, None)             # <<<<<<<<<<<<<<
 *     while msg is not None:
 *         if msg.is_synchronize:
 */
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_lgenerator;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyIter_Next2(__pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1484, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_cur_scope->__pyx_v_msg = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1485
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):
 *     msg = next(lgenerator, None)
 *     while msg is not None:             # <<<<<<<<<<<<<<
 *         if msg.is_synchronize:
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(synchronized=msg.synchronize)
 */
  while (1) {
    __pyx_t_3 = (__pyx_cur_scope->__pyx_v_msg != Py_None);
    if (!__pyx_t_3) break;

    /* "pytact/data_reader.pyx":1486
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 *         if msg.is_synchronize:             # <<<<<<<<<<<<<<
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(synchronized=msg.synchronize)
 *             lgenerator.send(response)
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_is_synchronize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1486, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1486, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_3) {

      /* "pytact/data_reader.pyx":1487
 *     while msg is not None:
 *         if msg.is_synchronize:
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(synchronized=msg.synchronize)             # <<<<<<<<<<<<<<
 *             lgenerator.send(response)
 *             msg = next(lgenerator, None)
 */
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Response); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_new_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_synchronize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_synchronized, __pyx_t_4) < 0) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1487, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_4);
      __pyx_t_4 = 0;

      /* "pytact/data_reader.pyx":1488
 *         if msg.is_synchronize:
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(synchronized=msg.synchronize)
 *             lgenerator.send(response)             # <<<<<<<<<<<<<<
 *             msg = next(lgenerator, None)
 *         elif msg.is_initialize:
 */
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_lgenerator, __pyx_n_s_send); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1488, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = NULL;
      __pyx_t_5 = 0;
      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_5 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_response};
        __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1488, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "pytact/data_reader.pyx":1489
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(synchronized=msg.synchronize)
 *             lgenerator.send(response)
 *             msg = next(lgenerator, None)             # <<<<<<<<<<<<<<
 *         elif msg.is_initialize:
 *             init = msg.initialize
 */
      __pyx_t_4 = __pyx_cur_scope->__pyx_v_lgenerator;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_PyIter_Next2(__pyx_t_4, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_msg);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_msg, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":1486
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 *         if msg.is_synchronize:             # <<<<<<<<<<<<<<
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(synchronized=msg.synchronize)
 *             lgenerator.send(response)
 */
      goto __pyx_L6;
    }

    /* "pytact/data_reader.pyx":1490
 *             lgenerator.send(response)
 *             msg = next(lgenerator, None)
 *         elif msg.is_initialize:             # <<<<<<<<<<<<<<
 *             init = msg.initialize
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_is_initialize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1490, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1490, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_3) {

      /* "pytact/data_reader.pyx":1491
 *             msg = next(lgenerator, None)
 *         elif msg.is_initialize:
 *             init = msg.initialize             # <<<<<<<<<<<<<<
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(
 */
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_initialize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1491, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_init);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_init, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":1492
 *         elif msg.is_initialize:
 *             init = msg.initialize
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "
 */
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_init, __pyx_n_s_data_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_major); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_currentVersion); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_major); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1492, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1492, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(__pyx_t_3)) {

        /* "pytact/data_reader.pyx":1494
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "             # <<<<<<<<<<<<<<
 *                     f"{graph_api_capnp.currentVersion} but file Coq sent a message versioned as "
 *                     f"{init.data_version}.")
 */
        __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1494, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_6 = 0;
        __pyx_t_7 = 127;
        __Pyx_INCREF(__pyx_kp_u_This_library_is_compiled_for_a_d);
        __pyx_t_6 += 68;
        __Pyx_GIVEREF(__pyx_kp_u_This_library_is_compiled_for_a_d);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_This_library_is_compiled_for_a_d);

        /* "pytact/data_reader.pyx":1495
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "
 *                     f"{graph_api_capnp.currentVersion} but file Coq sent a message versioned as "             # <<<<<<<<<<<<<<
 *                     f"{init.data_version}.")
 *             if init.stack_size != defs.graph_index.nodes.size():
 */
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1495, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_currentVersion); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1495, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1495, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7;
        __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_INCREF(__pyx_kp_u_but_file_Coq_sent_a_message_ver);
        __pyx_t_6 += 42;
        __Pyx_GIVEREF(__pyx_kp_u_but_file_Coq_sent_a_message_ver);
        PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_but_file_Coq_sent_a_message_ver);

        /* "pytact/data_reader.pyx":1496
 *                     f"This library is compiled for a dataset containing data versioned as "
 *                     f"{graph_api_capnp.currentVersion} but file Coq sent a message versioned as "
 *                     f"{init.data_version}.")             # <<<<<<<<<<<<<<
 *             if init.stack_size != defs.graph_index.nodes.size():
 *                 return msg
 */
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_init, __pyx_n_s_data_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1496, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_t_2, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1496, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_7;
        __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4);
        __pyx_t_4 = 0;
        __Pyx_INCREF(__pyx_kp_u__5);
        __pyx_t_6 += 1;
        __Pyx_GIVEREF(__pyx_kp_u__5);
        PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u__5);

        /* "pytact/data_reader.pyx":1494
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "             # <<<<<<<<<<<<<<
 *                     f"{graph_api_capnp.currentVersion} but file Coq sent a message versioned as "
 *                     f"{init.data_version}.")
 */
        __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 5, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1494, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "pytact/data_reader.pyx":1493
 *             init = msg.initialize
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     f"This library is compiled for a dataset containing data versioned as "
 *                     f"{graph_api_capnp.currentVersion} but file Coq sent a message versioned as "
 */
        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1493, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_Raise(__pyx_t_1, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 1493, __pyx_L1_error)

        /* "pytact/data_reader.pyx":1492
 *         elif msg.is_initialize:
 *             init = msg.initialize
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     f"This library is compiled for a dataset containing data versioned as "
 */
      }

      /* "pytact/data_reader.pyx":1497
 *                     f"{graph_api_capnp.currentVersion} but file Coq sent a message versioned as "
 *                     f"{init.data_version}.")
 *             if init.stack_size != defs.graph_index.nodes.size():             # <<<<<<<<<<<<<<
 *                 return msg
 *             else:
 */
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_init, __pyx_n_s_stack_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1497, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyInt_FromSize_t(__pyx_cur_scope->__pyx_v_defs->graph_index.nodes.size()); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1497, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1497, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1497, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_3) {

        /* "pytact/data_reader.pyx":1498
 *                     f"{init.data_version}.")
 *             if init.stack_size != defs.graph_index.nodes.size():
 *                 return msg             # <<<<<<<<<<<<<<
 *             else:
 *                 response = graph_api_capnp.PredictionProtocol.Response.new_message(initialized=None)
 */
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_cur_scope->__pyx_v_msg);
        goto __pyx_L0;

        /* "pytact/data_reader.pyx":1497
 *                     f"{graph_api_capnp.currentVersion} but file Coq sent a message versioned as "
 *                     f"{init.data_version}.")
 *             if init.stack_size != defs.graph_index.nodes.size():             # <<<<<<<<<<<<<<
 *                 return msg
 *             else:
 */
      }

      /* "pytact/data_reader.pyx":1500
 *                 return msg
 *             else:
 *                 response = graph_api_capnp.PredictionProtocol.Response.new_message(initialized=None)             # <<<<<<<<<<<<<<
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:
 */
      /*else*/ {
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Response); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_new_message); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_initialized, Py_None) < 0) __PYX_ERR(0, 1500, __pyx_L1_error)
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
        __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_1);
        __pyx_t_1 = 0;

        /* "pytact/data_reader.pyx":1501
 *             else:
 *                 response = graph_api_capnp.PredictionProtocol.Response.new_message(initialized=None)
 *                 lgenerator.send(response)             # <<<<<<<<<<<<<<
 *                 with online_definitions_initialize(defs, init) as definitions:
 *                     def prediction_generator_sub():
 */
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_lgenerator, __pyx_n_s_send); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1501, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_4 = NULL;
        __pyx_t_5 = 0;
        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_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_response};
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1501, __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;

        /* "pytact/data_reader.pyx":1502
 *                 response = graph_api_capnp.PredictionProtocol.Response.new_message(initialized=None)
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:             # <<<<<<<<<<<<<<
 *                     def prediction_generator_sub():
 *                         nonlocal msg
 */
        /*with:*/ {
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_online_definitions_initialize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = NULL;
          __pyx_t_5 = 0;
          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_5 = 1;
            }
          }
          {
            PyObject *__pyx_callargs[3] = {__pyx_t_4, ((PyObject *)__pyx_cur_scope->__pyx_v_defs), __pyx_cur_scope->__pyx_v_init};
            __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1502, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          }
          __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1502, __pyx_L9_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_9 = NULL;
          __pyx_t_5 = 0;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
              __pyx_t_5 = 1;
            }
          }
          {
            PyObject *__pyx_callargs[1] = {__pyx_t_9, };
            __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1502, __pyx_L9_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          }
          __pyx_t_4 = __pyx_t_2;
          __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          /*try:*/ {
            {
              __Pyx_ExceptionSave(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
              __Pyx_XGOTREF(__pyx_t_10);
              __Pyx_XGOTREF(__pyx_t_11);
              __Pyx_XGOTREF(__pyx_t_12);
              /*try:*/ {
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_definitions);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_definitions, __pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_4);
                __pyx_t_4 = 0;

                /* "pytact/data_reader.pyx":1503
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:
 *                     def prediction_generator_sub():             # <<<<<<<<<<<<<<
 *                         nonlocal msg
 *                         msg = yield from prediction_generator(lgenerator, definitions)
 */
                __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_20prediction_generator_1prediction_generator_sub, 0, __pyx_n_s_prediction_generator_locals_pred, ((PyObject*)__pyx_cur_scope), __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1503, __pyx_L15_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_prediction_generator_sub);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_prediction_generator_sub, __pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_4);
                __pyx_t_4 = 0;

                /* "pytact/data_reader.pyx":1506
 *                         nonlocal msg
 *                         msg = yield from prediction_generator(lgenerator, definitions)
 *                     pg = prediction_generator_sub()             # <<<<<<<<<<<<<<
 *                     yield GlobalContextMessage(definitions, init.tactics, init.log_annotation, pg)
 *                     if next(pg, None) is not None:
 */
                __pyx_t_4 = __pyx_pf_6pytact_11data_reader_20prediction_generator_prediction_generator_sub(__pyx_cur_scope->__pyx_v_prediction_generator_sub); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1506, __pyx_L15_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_pg);
                __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_pg, __pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_4);
                __pyx_t_4 = 0;

                /* "pytact/data_reader.pyx":1507
 *                         msg = yield from prediction_generator(lgenerator, definitions)
 *                     pg = prediction_generator_sub()
 *                     yield GlobalContextMessage(definitions, init.tactics, init.log_annotation, pg)             # <<<<<<<<<<<<<<
 *                     if next(pg, None) is not None:
 *                         raise Exception("Not all prediction requests were consumed")
 */
                __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_GlobalContextMessage); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1507, __pyx_L15_error)
                __Pyx_GOTREF(__pyx_t_1);
                __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_init, __pyx_n_s_tactics); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1507, __pyx_L15_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_init, __pyx_n_s_log_annotation); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1507, __pyx_L15_error)
                __Pyx_GOTREF(__pyx_t_9);
                __pyx_t_13 = NULL;
                __pyx_t_5 = 0;
                if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
                  __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_1);
                  if (likely(__pyx_t_13)) {
                    PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
                    __Pyx_INCREF(__pyx_t_13);
                    __Pyx_INCREF(function);
                    __Pyx_DECREF_SET(__pyx_t_1, function);
                    __pyx_t_5 = 1;
                  }
                }
                {
                  PyObject *__pyx_callargs[5] = {__pyx_t_13, __pyx_cur_scope->__pyx_v_definitions, __pyx_t_2, __pyx_t_9, __pyx_cur_scope->__pyx_v_pg};
                  __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5);
                  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
                  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1507, __pyx_L15_error)
                  __Pyx_GOTREF(__pyx_t_4);
                  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                }
                __pyx_r = __pyx_t_4;
                __pyx_t_4 = 0;
                __Pyx_XGIVEREF(__pyx_t_8);
                __pyx_cur_scope->__pyx_t_0 = __pyx_t_8;
                __Pyx_XGIVEREF(__pyx_t_10);
                __pyx_cur_scope->__pyx_t_1 = __pyx_t_10;
                __Pyx_XGIVEREF(__pyx_t_11);
                __pyx_cur_scope->__pyx_t_2 = __pyx_t_11;
                __Pyx_XGIVEREF(__pyx_t_12);
                __pyx_cur_scope->__pyx_t_3 = __pyx_t_12;
                __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_L23_resume_from_yield:;
                __pyx_t_8 = __pyx_cur_scope->__pyx_t_0;
                __pyx_cur_scope->__pyx_t_0 = 0;
                __Pyx_XGOTREF(__pyx_t_8);
                __pyx_t_10 = __pyx_cur_scope->__pyx_t_1;
                __pyx_cur_scope->__pyx_t_1 = 0;
                __Pyx_XGOTREF(__pyx_t_10);
                __pyx_t_11 = __pyx_cur_scope->__pyx_t_2;
                __pyx_cur_scope->__pyx_t_2 = 0;
                __Pyx_XGOTREF(__pyx_t_11);
                __pyx_t_12 = __pyx_cur_scope->__pyx_t_3;
                __pyx_cur_scope->__pyx_t_3 = 0;
                __Pyx_XGOTREF(__pyx_t_12);
                if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1507, __pyx_L15_error)

                /* "pytact/data_reader.pyx":1508
 *                     pg = prediction_generator_sub()
 *                     yield GlobalContextMessage(definitions, init.tactics, init.log_annotation, pg)
 *                     if next(pg, None) is not None:             # <<<<<<<<<<<<<<
 *                         raise Exception("Not all prediction requests were consumed")
 *         elif msg.is_predict:
 */
                __pyx_t_4 = __Pyx_PyIter_Next2(__pyx_cur_scope->__pyx_v_pg, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1508, __pyx_L15_error)
                __Pyx_GOTREF(__pyx_t_4);
                __pyx_t_3 = (__pyx_t_4 != Py_None);
                __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
                if (unlikely(__pyx_t_3)) {

                  /* "pytact/data_reader.pyx":1509
 *                     yield GlobalContextMessage(definitions, init.tactics, init.log_annotation, pg)
 *                     if next(pg, None) is not None:
 *                         raise Exception("Not all prediction requests were consumed")             # <<<<<<<<<<<<<<
 *         elif msg.is_predict:
 *             with online_data_predict(defs, msg.predict) as proof_state:
 */
                  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1509, __pyx_L15_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, 1509, __pyx_L15_error)

                  /* "pytact/data_reader.pyx":1508
 *                     pg = prediction_generator_sub()
 *                     yield GlobalContextMessage(definitions, init.tactics, init.log_annotation, pg)
 *                     if next(pg, None) is not None:             # <<<<<<<<<<<<<<
 *                         raise Exception("Not all prediction requests were consumed")
 *         elif msg.is_predict:
 */
                }

                /* "pytact/data_reader.pyx":1502
 *                 response = graph_api_capnp.PredictionProtocol.Response.new_message(initialized=None)
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:             # <<<<<<<<<<<<<<
 *                     def prediction_generator_sub():
 *                         nonlocal msg
 */
              }
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              goto __pyx_L22_try_end;
              __pyx_L15_error:;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              /*except:*/ {
                __Pyx_AddTraceback("pytact.data_reader.prediction_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_1, &__pyx_t_9) < 0) __PYX_ERR(0, 1502, __pyx_L17_except_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_GOTREF(__pyx_t_1);
                __Pyx_GOTREF(__pyx_t_9);
                __pyx_t_2 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1502, __pyx_L17_except_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, NULL);
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1502, __pyx_L17_except_error)
                __Pyx_GOTREF(__pyx_t_14);
                __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_14);
                __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
                if (__pyx_t_3 < 0) __PYX_ERR(0, 1502, __pyx_L17_except_error)
                __pyx_t_15 = (!__pyx_t_3);
                if (unlikely(__pyx_t_15)) {
                  __Pyx_GIVEREF(__pyx_t_4);
                  __Pyx_GIVEREF(__pyx_t_1);
                  __Pyx_XGIVEREF(__pyx_t_9);
                  __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_1, __pyx_t_9);
                  __pyx_t_4 = 0; __pyx_t_1 = 0; __pyx_t_9 = 0; 
                  __PYX_ERR(0, 1502, __pyx_L17_except_error)
                }
                __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
                __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
                __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
                goto __pyx_L16_exception_handled;
              }
              __pyx_L17_except_error:;
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
              goto __pyx_L1_error;
              __pyx_L16_exception_handled:;
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_12);
              __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
              __pyx_L22_try_end:;
            }
          }
          /*finally:*/ {
            /*normal exit:*/{
              if (__pyx_t_8) {
                __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__2, NULL);
                __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
                if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1502, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_12);
                __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              }
              goto __pyx_L14;
            }
            __pyx_L14:;
          }
          goto __pyx_L28;
          __pyx_L9_error:;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L1_error;
          __pyx_L28:;
        }
      }

      /* "pytact/data_reader.pyx":1490
 *             lgenerator.send(response)
 *             msg = next(lgenerator, None)
 *         elif msg.is_initialize:             # <<<<<<<<<<<<<<
 *             init = msg.initialize
 *             if init.data_version.major != graph_api_capnp.currentVersion.major:
 */
      goto __pyx_L6;
    }

    /* "pytact/data_reader.pyx":1510
 *                     if next(pg, None) is not None:
 *                         raise Exception("Not all prediction requests were consumed")
 *         elif msg.is_predict:             # <<<<<<<<<<<<<<
 *             with online_data_predict(defs, msg.predict) as proof_state:
 *                 preds = yield proof_state
 */
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_is_predict); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1510, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_15) {

      /* "pytact/data_reader.pyx":1511
 *                         raise Exception("Not all prediction requests were consumed")
 *         elif msg.is_predict:
 *             with online_data_predict(defs, msg.predict) as proof_state:             # <<<<<<<<<<<<<<
 *                 preds = yield proof_state
 *                 response = convert_predictions(preds, defs.graph_index.nodes.size())
 */
      /*with:*/ {
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_online_data_predict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_predict); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1511, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_2 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_cur_scope->__pyx_v_defs), __pyx_t_4};
          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1511, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_exit); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1511, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_9, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1511, __pyx_L29_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_2 = NULL;
        __pyx_t_5 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
            __pyx_t_5 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_2, };
          __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L29_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
        __pyx_t_4 = __pyx_t_1;
        __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        /*try:*/ {
          {
            __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_11, &__pyx_t_10);
            __Pyx_XGOTREF(__pyx_t_12);
            __Pyx_XGOTREF(__pyx_t_11);
            __Pyx_XGOTREF(__pyx_t_10);
            /*try:*/ {
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_proof_state);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_proof_state, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              __pyx_t_4 = 0;

              /* "pytact/data_reader.pyx":1512
 *         elif msg.is_predict:
 *             with online_data_predict(defs, msg.predict) as proof_state:
 *                 preds = yield proof_state             # <<<<<<<<<<<<<<
 *                 response = convert_predictions(preds, defs.graph_index.nodes.size())
 *             lgenerator.send(response)
 */
              __Pyx_INCREF(__pyx_cur_scope->__pyx_v_proof_state);
              __pyx_r = __pyx_cur_scope->__pyx_v_proof_state;
              __Pyx_XGIVEREF(__pyx_t_8);
              __pyx_cur_scope->__pyx_t_0 = __pyx_t_8;
              __Pyx_XGIVEREF(__pyx_t_10);
              __pyx_cur_scope->__pyx_t_1 = __pyx_t_10;
              __Pyx_XGIVEREF(__pyx_t_11);
              __pyx_cur_scope->__pyx_t_2 = __pyx_t_11;
              __Pyx_XGIVEREF(__pyx_t_12);
              __pyx_cur_scope->__pyx_t_3 = __pyx_t_12;
              __Pyx_XGIVEREF(__pyx_r);
              __Pyx_RefNannyFinishContext();
              __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
              /* return from generator, yielding value */
              __pyx_generator->resume_label = 2;
              return __pyx_r;
              __pyx_L43_resume_from_yield:;
              __pyx_t_8 = __pyx_cur_scope->__pyx_t_0;
              __pyx_cur_scope->__pyx_t_0 = 0;
              __Pyx_XGOTREF(__pyx_t_8);
              __pyx_t_10 = __pyx_cur_scope->__pyx_t_1;
              __pyx_cur_scope->__pyx_t_1 = 0;
              __Pyx_XGOTREF(__pyx_t_10);
              __pyx_t_11 = __pyx_cur_scope->__pyx_t_2;
              __pyx_cur_scope->__pyx_t_2 = 0;
              __Pyx_XGOTREF(__pyx_t_11);
              __pyx_t_12 = __pyx_cur_scope->__pyx_t_3;
              __pyx_cur_scope->__pyx_t_3 = 0;
              __Pyx_XGOTREF(__pyx_t_12);
              if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1512, __pyx_L35_error)
              __pyx_t_4 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_4);
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_preds);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_preds, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              __pyx_t_4 = 0;

              /* "pytact/data_reader.pyx":1513
 *             with online_data_predict(defs, msg.predict) as proof_state:
 *                 preds = yield proof_state
 *                 response = convert_predictions(preds, defs.graph_index.nodes.size())             # <<<<<<<<<<<<<<
 *             lgenerator.send(response)
 *             yield
 */
              __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_convert_predictions); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1513, __pyx_L35_error)
              __Pyx_GOTREF(__pyx_t_9);
              __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_cur_scope->__pyx_v_defs->graph_index.nodes.size()); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1513, __pyx_L35_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = NULL;
              __pyx_t_5 = 0;
              if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
                __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);
                if (likely(__pyx_t_2)) {
                  PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
                  __Pyx_INCREF(__pyx_t_2);
                  __Pyx_INCREF(function);
                  __Pyx_DECREF_SET(__pyx_t_9, function);
                  __pyx_t_5 = 1;
                }
              }
              {
                PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_cur_scope->__pyx_v_preds, __pyx_t_1};
                __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
                __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
                __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
                if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1513, __pyx_L35_error)
                __Pyx_GOTREF(__pyx_t_4);
                __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              }
              __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
              __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_4);
              __Pyx_GIVEREF(__pyx_t_4);
              __pyx_t_4 = 0;

              /* "pytact/data_reader.pyx":1511
 *                         raise Exception("Not all prediction requests were consumed")
 *         elif msg.is_predict:
 *             with online_data_predict(defs, msg.predict) as proof_state:             # <<<<<<<<<<<<<<
 *                 preds = yield proof_state
 *                 response = convert_predictions(preds, defs.graph_index.nodes.size())
 */
            }
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            goto __pyx_L42_try_end;
            __pyx_L35_error:;
            __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            /*except:*/ {
              __Pyx_AddTraceback("pytact.data_reader.prediction_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_1) < 0) __PYX_ERR(0, 1511, __pyx_L37_except_error)
              __Pyx_GOTREF(__pyx_t_4);
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_2 = PyTuple_Pack(3, __pyx_t_4, __pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1511, __pyx_L37_except_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, NULL);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1511, __pyx_L37_except_error)
              __Pyx_GOTREF(__pyx_t_14);
              __pyx_t_15 = __Pyx_PyObject_IsTrue(__pyx_t_14);
              __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
              if (__pyx_t_15 < 0) __PYX_ERR(0, 1511, __pyx_L37_except_error)
              __pyx_t_3 = (!__pyx_t_15);
              if (unlikely(__pyx_t_3)) {
                __Pyx_GIVEREF(__pyx_t_4);
                __Pyx_GIVEREF(__pyx_t_9);
                __Pyx_XGIVEREF(__pyx_t_1);
                __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_9, __pyx_t_1);
                __pyx_t_4 = 0; __pyx_t_9 = 0; __pyx_t_1 = 0; 
                __PYX_ERR(0, 1511, __pyx_L37_except_error)
              }
              __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
              goto __pyx_L36_exception_handled;
            }
            __pyx_L37_except_error:;
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
            goto __pyx_L1_error;
            __pyx_L36_exception_handled:;
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_11, __pyx_t_10);
            __pyx_L42_try_end:;
          }
        }
        /*finally:*/ {
          /*normal exit:*/{
            if (__pyx_t_8) {
              __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__2, NULL);
              __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
              if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1511, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
            }
            goto __pyx_L34;
          }
          __pyx_L34:;
        }
        goto __pyx_L47;
        __pyx_L29_error:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L1_error;
        __pyx_L47:;
      }

      /* "pytact/data_reader.pyx":1514
 *                 preds = yield proof_state
 *                 response = convert_predictions(preds, defs.graph_index.nodes.size())
 *             lgenerator.send(response)             # <<<<<<<<<<<<<<
 *             yield
 *             msg = next(lgenerator, None)
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_lgenerator, __pyx_n_s_send); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1514, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (unlikely(!__pyx_cur_scope->__pyx_v_response)) { __Pyx_RaiseUnboundLocalError("response"); __PYX_ERR(0, 1514, __pyx_L1_error) }
      __pyx_t_4 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
          __pyx_t_5 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_response};
        __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1514, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "pytact/data_reader.pyx":1515
 *                 response = convert_predictions(preds, defs.graph_index.nodes.size())
 *             lgenerator.send(response)
 *             yield             # <<<<<<<<<<<<<<
 *             msg = next(lgenerator, None)
 *         elif msg.is_check_alignment:
 */
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 3;
      return __pyx_r;
      __pyx_L48_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1515, __pyx_L1_error)

      /* "pytact/data_reader.pyx":1516
 *             lgenerator.send(response)
 *             yield
 *             msg = next(lgenerator, None)             # <<<<<<<<<<<<<<
 *         elif msg.is_check_alignment:
 *             alignment = yield CheckAlignmentMessage()
 */
      __pyx_t_1 = __pyx_cur_scope->__pyx_v_lgenerator;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_9 = __Pyx_PyIter_Next2(__pyx_t_1, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1516, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_msg);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_msg, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_t_9 = 0;

      /* "pytact/data_reader.pyx":1510
 *                     if next(pg, None) is not None:
 *                         raise Exception("Not all prediction requests were consumed")
 *         elif msg.is_predict:             # <<<<<<<<<<<<<<
 *             with online_data_predict(defs, msg.predict) as proof_state:
 *                 preds = yield proof_state
 */
      goto __pyx_L6;
    }

    /* "pytact/data_reader.pyx":1517
 *             yield
 *             msg = next(lgenerator, None)
 *         elif msg.is_check_alignment:             # <<<<<<<<<<<<<<
 *             alignment = yield CheckAlignmentMessage()
 *             alignment = {'unalignedTactics': alignment.unknown_tactics,
 */
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_msg, __pyx_n_s_is_check_alignment); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1517, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1517, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (likely(__pyx_t_3)) {

      /* "pytact/data_reader.pyx":1518
 *             msg = next(lgenerator, None)
 *         elif msg.is_check_alignment:
 *             alignment = yield CheckAlignmentMessage()             # <<<<<<<<<<<<<<
 *             alignment = {'unalignedTactics': alignment.unknown_tactics,
 *                          'unalignedDefinitions':
 */
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CheckAlignmentMessage); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1518, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_5 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[1] = {__pyx_t_4, };
        __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1518, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __pyx_r = __pyx_t_9;
      __pyx_t_9 = 0;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 4;
      return __pyx_r;
      __pyx_L49_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1518, __pyx_L1_error)
      __pyx_t_9 = __pyx_sent_value; __Pyx_INCREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_alignment);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_alignment, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_t_9 = 0;

      /* "pytact/data_reader.pyx":1519
 *         elif msg.is_check_alignment:
 *             alignment = yield CheckAlignmentMessage()
 *             alignment = {'unalignedTactics': alignment.unknown_tactics,             # <<<<<<<<<<<<<<
 *                          'unalignedDefinitions':
 *                          [{'depIndex': defs.graph_index.nodes.size() - 1 - d.node.graph, 'nodeIndex': d.node.nodeid}
 */
      __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1519, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_alignment, __pyx_n_s_unknown_tactics); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1519, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_unalignedTactics, __pyx_t_1) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      { /* enter inner scope */

        /* "pytact/data_reader.pyx":1521
 *             alignment = {'unalignedTactics': alignment.unknown_tactics,
 *                          'unalignedDefinitions':
 *                          [{'depIndex': defs.graph_index.nodes.size() - 1 - d.node.graph, 'nodeIndex': d.node.nodeid}             # <<<<<<<<<<<<<<
 *                            for d in alignment.unknown_definitions]}
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(alignment=alignment)
 */
        __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1521, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);

        /* "pytact/data_reader.pyx":1522
 *                          'unalignedDefinitions':
 *                          [{'depIndex': defs.graph_index.nodes.size() - 1 - d.node.graph, 'nodeIndex': d.node.nodeid}
 *                            for d in alignment.unknown_definitions]}             # <<<<<<<<<<<<<<
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(alignment=alignment)
 *             lgenerator.send(response)
 */
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_alignment, __pyx_n_s_unknown_definitions); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1522, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
          __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
          __pyx_t_16 = NULL;
        } else {
          __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1522, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_16 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1522, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        for (;;) {
          if (likely(!__pyx_t_16)) {
            if (likely(PyList_CheckExact(__pyx_t_2))) {
              if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 1522, __pyx_L1_error)
              #else
              __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1522, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            } else {
              if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 1522, __pyx_L1_error)
              #else
              __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1522, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              #endif
            }
          } else {
            __pyx_t_4 = __pyx_t_16(__pyx_t_2);
            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, 1522, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_4);
          }
          __Pyx_XGOTREF(__pyx_cur_scope->__pyx_9genexpr11__pyx_v_d);
          __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_9genexpr11__pyx_v_d, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_4);
          __pyx_t_4 = 0;

          /* "pytact/data_reader.pyx":1521
 *             alignment = {'unalignedTactics': alignment.unknown_tactics,
 *                          'unalignedDefinitions':
 *                          [{'depIndex': defs.graph_index.nodes.size() - 1 - d.node.graph, 'nodeIndex': d.node.nodeid}             # <<<<<<<<<<<<<<
 *                            for d in alignment.unknown_definitions]}
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(alignment=alignment)
 */
          __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_13 = __Pyx_PyInt_FromSize_t((__pyx_cur_scope->__pyx_v_defs->graph_index.nodes.size() - 1)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr11__pyx_v_d, __pyx_n_s_node_2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_graph); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_17 = PyNumber_Subtract(__pyx_t_13, __pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_depIndex, __pyx_t_17) < 0) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_9genexpr11__pyx_v_d, __pyx_n_s_node_2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_17);
          __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_17, __pyx_n_s_nodeid); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_u_nodeIndex, __pyx_t_18) < 0) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 1521, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

          /* "pytact/data_reader.pyx":1522
 *                          'unalignedDefinitions':
 *                          [{'depIndex': defs.graph_index.nodes.size() - 1 - d.node.graph, 'nodeIndex': d.node.nodeid}
 *                            for d in alignment.unknown_definitions]}             # <<<<<<<<<<<<<<
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(alignment=alignment)
 *             lgenerator.send(response)
 */
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } /* exit inner scope */
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_u_unalignedDefinitions, __pyx_t_1) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_alignment);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_alignment, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_t_9 = 0;

      /* "pytact/data_reader.pyx":1523
 *                          [{'depIndex': defs.graph_index.nodes.size() - 1 - d.node.graph, 'nodeIndex': d.node.nodeid}
 *                            for d in alignment.unknown_definitions]}
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(alignment=alignment)             # <<<<<<<<<<<<<<
 *             lgenerator.send(response)
 *             yield
 */
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1523, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_PredictionProtocol); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1523, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Response); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1523, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_new_message); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1523, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1523, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_alignment, __pyx_cur_scope->__pyx_v_alignment) < 0) __PYX_ERR(0, 1523, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1523, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_response);
      __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_response, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_2);
      __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":1524
 *                            for d in alignment.unknown_definitions]}
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(alignment=alignment)
 *             lgenerator.send(response)             # <<<<<<<<<<<<<<
 *             yield
 *             msg = next(lgenerator, None)
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_lgenerator, __pyx_n_s_send); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1524, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = NULL;
      __pyx_t_5 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
          __pyx_t_5 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_cur_scope->__pyx_v_response};
        __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1524, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "pytact/data_reader.pyx":1525
 *             response = graph_api_capnp.PredictionProtocol.Response.new_message(alignment=alignment)
 *             lgenerator.send(response)
 *             yield             # <<<<<<<<<<<<<<
 *             msg = next(lgenerator, None)
 *         else:
 */
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 5;
      return __pyx_r;
      __pyx_L52_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1525, __pyx_L1_error)

      /* "pytact/data_reader.pyx":1526
 *             lgenerator.send(response)
 *             yield
 *             msg = next(lgenerator, None)             # <<<<<<<<<<<<<<
 *         else:
 *             raise Exception("Capnp protocol error")
 */
      __pyx_t_2 = __pyx_cur_scope->__pyx_v_lgenerator;
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_9 = __Pyx_PyIter_Next2(__pyx_t_2, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1526, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_msg);
      __Pyx_DECREF_SET(__pyx_cur_scope->__pyx_v_msg, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_9);
      __pyx_t_9 = 0;

      /* "pytact/data_reader.pyx":1517
 *             yield
 *             msg = next(lgenerator, None)
 *         elif msg.is_check_alignment:             # <<<<<<<<<<<<<<
 *             alignment = yield CheckAlignmentMessage()
 *             alignment = {'unalignedTactics': alignment.unknown_tactics,
 */
      goto __pyx_L6;
    }

    /* "pytact/data_reader.pyx":1528
 *             msg = next(lgenerator, None)
 *         else:
 *             raise Exception("Capnp protocol error")             # <<<<<<<<<<<<<<
 * 
 * def capnp_message_generator(socket: socket.socket, record: BinaryIO | None = None) -> GlobalContextMessage:
 */
    /*else*/ {
      __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1528, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_Raise(__pyx_t_9, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __PYX_ERR(0, 1528, __pyx_L1_error)
    }
    __pyx_L6:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1483
 * 
 * 
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):             # <<<<<<<<<<<<<<
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 */

  /* 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_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("prediction_generator", __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;
}

/* "pytact/data_reader.pyx":1530
 *             raise Exception("Capnp protocol error")
 * 
 * def capnp_message_generator(socket: socket.socket, record: BinaryIO | None = None) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """A generator that facilitates communication between a prediction server and a Coq process.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_33capnp_message_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_32capnp_message_generator, "A generator that facilitates communication between a prediction server and a Coq process.\n\n    Given a `socket`, this function creates a `GlobalContextMessage` `context`. This message contains an\n    initially empty list of available tactics and definitions in the global context. Through\n    `context.prediction_requests` one can access a generator that yields prediction requests and expects\n    predictions to be sent in response. The possible messages are as follows:\n    - `GlobalContextMessage`: An additional, nested global context message that adds in additional tactics\n       and definitions. The prediction requests of this nested context need to be exhausted before continuing\n       with messages from the current context.\n    - `CheckAlignmentMessage`: A request to check which of Coq's current tactics and definitions the\n      prediction server currently \"knows about\". The generator expects a `CheckAlignmentResponse` to be\n      sent in response.\n    - `ProofState`: A request to make tactic predictions for a given proof state. Either a\n      `TacticPredictionsGraph` or a `TacticPredictionsText` message is expected in return.\n\n    When `record` is passed a file descriptor, all received and sent messages will be dumped into that file\n    descriptor. These messages can then be replayed later using `capnp_message_generator_from_file`.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_33capnp_message_generator = {"capnp_message_generator", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_33capnp_message_generator, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_32capnp_message_generator};
static PyObject *__pyx_pw_6pytact_11data_reader_33capnp_message_generator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_socket = 0;
  PyObject *__pyx_v_record = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("capnp_message_generator (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_socket,&__pyx_n_s_record,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_socket,&__pyx_n_s_record,0};
    #endif
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_socket)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1530, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1530, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "capnp_message_generator") < 0)) __PYX_ERR(0, 1530, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_socket = values[0];
    __pyx_v_record = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("capnp_message_generator", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1530, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.capnp_message_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_32capnp_message_generator(__pyx_self, __pyx_v_socket, __pyx_v_record);

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

static PyObject *__pyx_pf_6pytact_11data_reader_32capnp_message_generator(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_socket, PyObject *__pyx_v_record) {
  PyObject *__pyx_v_lgenerator = NULL;
  PyObject *__pyx_v_defs = NULL;
  PyObject *__pyx_v_pg = 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;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("capnp_message_generator", 0);

  /* "pytact/data_reader.pyx":1549
 *     descriptor. These messages can then be replayed later using `capnp_message_generator_from_file`.
 *     """
 *     lgenerator = capnp_message_generator_lowlevel(socket, record)             # <<<<<<<<<<<<<<
 *     defs = OnlineDefinitionsReader.init_empty()
 *     pg = prediction_generator(lgenerator, defs)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_capnp_message_generator_lowlevel); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __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;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_socket, __pyx_v_record};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_lgenerator = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1550
 *     """
 *     lgenerator = capnp_message_generator_lowlevel(socket, record)
 *     defs = OnlineDefinitionsReader.init_empty()             # <<<<<<<<<<<<<<
 *     pg = prediction_generator(lgenerator, defs)
 *     return GlobalContextMessage(defs, [], None, pg)
 */
  __pyx_t_1 = __pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init_empty(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_defs = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1551
 *     lgenerator = capnp_message_generator_lowlevel(socket, record)
 *     defs = OnlineDefinitionsReader.init_empty()
 *     pg = prediction_generator(lgenerator, defs)             # <<<<<<<<<<<<<<
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_prediction_generator); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1551, __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;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_lgenerator, __pyx_v_defs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1551, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_pg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1552
 *     defs = OnlineDefinitionsReader.init_empty()
 *     pg = prediction_generator(lgenerator, defs)
 *     return GlobalContextMessage(defs, [], None, pg)             # <<<<<<<<<<<<<<
 * 
 * def capnp_message_generator_from_file(message_file: BinaryIO, check = True) -> GlobalContextMessage:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_GlobalContextMessage); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  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_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_defs, __pyx_t_3, Py_None, __pyx_v_pg};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __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;

  /* "pytact/data_reader.pyx":1530
 *             raise Exception("Capnp protocol error")
 * 
 * def capnp_message_generator(socket: socket.socket, record: BinaryIO | None = None) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """A generator that facilitates communication between a prediction server and a Coq process.
 * 
 */

  /* 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("pytact.data_reader.capnp_message_generator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_lgenerator);
  __Pyx_XDECREF(__pyx_v_defs);
  __Pyx_XDECREF(__pyx_v_pg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1554
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 * def capnp_message_generator_from_file(message_file: BinaryIO, check = True) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """Replay and verify a pre-recorded communication sequence between Coq and a prediction server.
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_35capnp_message_generator_from_file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_34capnp_message_generator_from_file, "Replay and verify a pre-recorded communication sequence between Coq and a prediction server.\n\n    Highlevel variant of `capnp_message_generator_from_file_lowlevel`.\n\n    Accepts a `message_file` containing a stream of Capt'n Proto messages as recorded using\n    `capnp_message_generator(s, record=message_file)`. The resulting generator acts just like the generator\n    created by `capnp_message_generator` except that it is not connected to the socket but just replays the\n    pre-recorded messages. Every responsemessage received by this generator through `send` will be compared against\n    the recorded response and if they differ an error is thrown.\n\n    Arguments:\n    - `check` governs wether or not the response messages will be compared against recorded messages\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_35capnp_message_generator_from_file = {"capnp_message_generator_from_file", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_35capnp_message_generator_from_file, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_34capnp_message_generator_from_file};
static PyObject *__pyx_pw_6pytact_11data_reader_35capnp_message_generator_from_file(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_message_file = 0;
  PyObject *__pyx_v_check = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("capnp_message_generator_from_file (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message_file,&__pyx_n_s_check,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_message_file,&__pyx_n_s_check,0};
    #endif
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_True));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_message_file)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1554, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_check);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1554, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "capnp_message_generator_from_file") < 0)) __PYX_ERR(0, 1554, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_message_file = values[0];
    __pyx_v_check = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("capnp_message_generator_from_file", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1554, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.capnp_message_generator_from_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_34capnp_message_generator_from_file(__pyx_self, __pyx_v_message_file, __pyx_v_check);

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

static PyObject *__pyx_pf_6pytact_11data_reader_34capnp_message_generator_from_file(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_message_file, PyObject *__pyx_v_check) {
  PyObject *__pyx_v_lgenerator = NULL;
  PyObject *__pyx_v_defs = NULL;
  PyObject *__pyx_v_pg = 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;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("capnp_message_generator_from_file", 0);

  /* "pytact/data_reader.pyx":1568
 *     - `check` governs wether or not the response messages will be compared against recorded messages
 *     """
 *     lgenerator = capnp_message_generator_from_file_lowlevel(message_file, check)             # <<<<<<<<<<<<<<
 *     defs = OnlineDefinitionsReader.init_empty()
 *     pg = prediction_generator(lgenerator, defs)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_capnp_message_generator_from_fil); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1568, __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;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_message_file, __pyx_v_check};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_lgenerator = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1569
 *     """
 *     lgenerator = capnp_message_generator_from_file_lowlevel(message_file, check)
 *     defs = OnlineDefinitionsReader.init_empty()             # <<<<<<<<<<<<<<
 *     pg = prediction_generator(lgenerator, defs)
 *     return GlobalContextMessage(defs, [], None, pg)
 */
  __pyx_t_1 = __pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init_empty(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_defs = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1570
 *     lgenerator = capnp_message_generator_from_file_lowlevel(message_file, check)
 *     defs = OnlineDefinitionsReader.init_empty()
 *     pg = prediction_generator(lgenerator, defs)             # <<<<<<<<<<<<<<
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_prediction_generator); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1570, __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;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_lgenerator, __pyx_v_defs};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_pg = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1571
 *     defs = OnlineDefinitionsReader.init_empty()
 *     pg = prediction_generator(lgenerator, defs)
 *     return GlobalContextMessage(defs, [], None, pg)             # <<<<<<<<<<<<<<
 * 
 * class GlobalContextSets:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_GlobalContextMessage); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  __pyx_t_4 = 0;
  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_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_5, __pyx_v_defs, __pyx_t_3, Py_None, __pyx_v_pg};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 4+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1571, __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;

  /* "pytact/data_reader.pyx":1554
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 * def capnp_message_generator_from_file(message_file: BinaryIO, check = True) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """Replay and verify a pre-recorded communication sequence between Coq and a prediction server.
 * 
 */

  /* 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("pytact.data_reader.capnp_message_generator_from_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_lgenerator);
  __Pyx_XDECREF(__pyx_v_defs);
  __Pyx_XDECREF(__pyx_v_pg);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1593
 *     ```
 *     """
 *     def __init__(self, cache, parent: GlobalContextSets | None,             # <<<<<<<<<<<<<<
 *                  should_propagate: Callable[[Definition], bool]):
 *         """Do not call directly. Use `GlobalContextSets.new_context` and `GlobalContextSets.sub_context`."""
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_17GlobalContextSets___init__, "Do not call directly. Use `GlobalContextSets.new_context` and `GlobalContextSets.sub_context`.");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17GlobalContextSets_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_17GlobalContextSets_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_17GlobalContextSets___init__};
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_1__init__(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_cache = 0;
  PyObject *__pyx_v_parent = 0;
  PyObject *__pyx_v_should_propagate = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_cache,&__pyx_n_s_parent,&__pyx_n_s_should_propagate,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_cache,&__pyx_n_s_parent,&__pyx_n_s_should_propagate,0};
    #endif
    PyObject* values[4] = {0,0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1593, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_cache)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1593, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 1593, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_parent)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1593, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 1593, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_should_propagate)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1593, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 1593, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 1593, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
      values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
    }
    __pyx_v_self = values[0];
    __pyx_v_cache = values[1];
    __pyx_v_parent = values[2];
    __pyx_v_should_propagate = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1593, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_17GlobalContextSets___init__(__pyx_self, __pyx_v_self, __pyx_v_cache, __pyx_v_parent, __pyx_v_should_propagate);

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

static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_cache, PyObject *__pyx_v_parent, PyObject *__pyx_v_should_propagate) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "pytact/data_reader.pyx":1596
 *                  should_propagate: Callable[[Definition], bool]):
 *         """Do not call directly. Use `GlobalContextSets.new_context` and `GlobalContextSets.sub_context`."""
 *         self.cache: Map = cache             # <<<<<<<<<<<<<<
 *         self.parent = parent
 *         self.should_propagate = should_propagate
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cache, __pyx_v_cache) < 0) __PYX_ERR(0, 1596, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1597
 *         """Do not call directly. Use `GlobalContextSets.new_context` and `GlobalContextSets.sub_context`."""
 *         self.cache: Map = cache
 *         self.parent = parent             # <<<<<<<<<<<<<<
 *         self.should_propagate = should_propagate
 * 
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_parent, __pyx_v_parent) < 0) __PYX_ERR(0, 1597, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1598
 *         self.cache: Map = cache
 *         self.parent = parent
 *         self.should_propagate = should_propagate             # <<<<<<<<<<<<<<
 * 
 *     def _propagate(self, d: Definition, context: Map):
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_should_propagate, __pyx_v_should_propagate) < 0) __PYX_ERR(0, 1598, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1593
 *     ```
 *     """
 *     def __init__(self, cache, parent: GlobalContextSets | None,             # <<<<<<<<<<<<<<
 *                  should_propagate: Callable[[Definition], bool]):
 *         """Do not call directly. Use `GlobalContextSets.new_context` and `GlobalContextSets.sub_context`."""
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1600
 *         self.should_propagate = should_propagate
 * 
 *     def _propagate(self, d: Definition, context: Map):             # <<<<<<<<<<<<<<
 *         self.cache = self.cache.set(d, context)
 *         if self.should_propagate(d) and (parent := self.parent):
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_3_propagate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17GlobalContextSets_3_propagate = {"_propagate", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_17GlobalContextSets_3_propagate, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_3_propagate(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d = 0;
  PyObject *__pyx_v_context = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_propagate (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_d,&__pyx_n_s_context,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_d,&__pyx_n_s_context,0};
    #endif
    PyObject* values[3] = {0,0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1600, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1600, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_propagate", 1, 3, 3, 1); __PYX_ERR(0, 1600, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_context)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1600, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_propagate", 1, 3, 3, 2); __PYX_ERR(0, 1600, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_propagate") < 0)) __PYX_ERR(0, 1600, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
    }
    __pyx_v_self = values[0];
    __pyx_v_d = ((struct __pyx_obj_6pytact_11data_reader_Definition *)values[1]);
    __pyx_v_context = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_propagate", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 1600, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets._propagate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d), __pyx_ptype_6pytact_11data_reader_Definition, 0, "d", 0))) __PYX_ERR(0, 1600, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_17GlobalContextSets_2_propagate(__pyx_self, __pyx_v_self, __pyx_v_d, __pyx_v_context);

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

static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_2_propagate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d, PyObject *__pyx_v_context) {
  PyObject *__pyx_v_parent = 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;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_propagate", 0);

  /* "pytact/data_reader.pyx":1601
 * 
 *     def _propagate(self, d: Definition, context: Map):
 *         self.cache = self.cache.set(d, context)             # <<<<<<<<<<<<<<
 *         if self.should_propagate(d) and (parent := self.parent):
 *             parent._propagate(d, context)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_set); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1601, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  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_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_v_d), __pyx_v_context};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cache, __pyx_t_1) < 0) __PYX_ERR(0, 1601, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1602
 *     def _propagate(self, d: Definition, context: Map):
 *         self.cache = self.cache.set(d, context)
 *         if self.should_propagate(d) and (parent := self.parent):             # <<<<<<<<<<<<<<
 *             parent._propagate(d, context)
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_should_propagate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  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_4 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_d)};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1602, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1602, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_parent); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_parent = __pyx_t_1;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 1602, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_5) {

    /* "pytact/data_reader.pyx":1603
 *         self.cache = self.cache.set(d, context)
 *         if self.should_propagate(d) and (parent := self.parent):
 *             parent._propagate(d, context)             # <<<<<<<<<<<<<<
 * 
 *     def _global_context_set(self, d: Definition) -> Map:
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_parent, __pyx_n_s_propagate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1603, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    __pyx_t_4 = 0;
    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_4 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_v_d), __pyx_v_context};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1603, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":1602
 *     def _propagate(self, d: Definition, context: Map):
 *         self.cache = self.cache.set(d, context)
 *         if self.should_propagate(d) and (parent := self.parent):             # <<<<<<<<<<<<<<
 *             parent._propagate(d, context)
 * 
 */
  }

  /* "pytact/data_reader.pyx":1600
 *         self.should_propagate = should_propagate
 * 
 *     def _propagate(self, d: Definition, context: Map):             # <<<<<<<<<<<<<<
 *         self.cache = self.cache.set(d, context)
 *         if self.should_propagate(d) and (parent := self.parent):
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets._propagate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parent);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1605
 *             parent._propagate(d, context)
 * 
 *     def _global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         try:
 *             return self.cache[d]
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_5_global_context_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17GlobalContextSets_5_global_context_set = {"_global_context_set", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_17GlobalContextSets_5_global_context_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_5_global_context_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_global_context_set (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_d,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_d,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1605, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1605, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("_global_context_set", 1, 2, 2, 1); __PYX_ERR(0, 1605, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_global_context_set") < 0)) __PYX_ERR(0, 1605, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_d = ((struct __pyx_obj_6pytact_11data_reader_Definition *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_global_context_set", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1605, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets._global_context_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d), __pyx_ptype_6pytact_11data_reader_Definition, 0, "d", 0))) __PYX_ERR(0, 1605, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_17GlobalContextSets_4_global_context_set(__pyx_self, __pyx_v_self, __pyx_v_d);

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

static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_4_global_context_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d) {
  PyObject *__pyx_v_external_previous = NULL;
  PyObject *__pyx_v_new_set = NULL;
  PyObject *__pyx_v_ep = NULL;
  PyObject *__pyx_v_prev = 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;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  Py_ssize_t __pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_global_context_set", 0);

  /* "pytact/data_reader.pyx":1606
 * 
 *     def _global_context_set(self, d: Definition) -> Map:
 *         try:             # <<<<<<<<<<<<<<
 *             return self.cache[d]
 *         except KeyError:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "pytact/data_reader.pyx":1607
 *     def _global_context_set(self, d: Definition) -> Map:
 *         try:
 *             return self.cache[d]             # <<<<<<<<<<<<<<
 *         except KeyError:
 *             external_previous = list(d.external_previous)
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cache); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1607, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_4, ((PyObject *)__pyx_v_d)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1607, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = __pyx_t_5;
      __pyx_t_5 = 0;
      goto __pyx_L7_try_return;

      /* "pytact/data_reader.pyx":1606
 * 
 *     def _global_context_set(self, d: Definition) -> Map:
 *         try:             # <<<<<<<<<<<<<<
 *             return self.cache[d]
 *         except KeyError:
 */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;

    /* "pytact/data_reader.pyx":1608
 *         try:
 *             return self.cache[d]
 *         except KeyError:             # <<<<<<<<<<<<<<
 *             external_previous = list(d.external_previous)
 *             if prev := d.previous:
 */
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets._global_context_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(0, 1608, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GOTREF(__pyx_t_7);

      /* "pytact/data_reader.pyx":1609
 *             return self.cache[d]
 *         except KeyError:
 *             external_previous = list(d.external_previous)             # <<<<<<<<<<<<<<
 *             if prev := d.previous:
 *                 new_set = self._global_context_set(prev).set(prev, ())
 */
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_d), __pyx_n_s_external_previous); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1609, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PySequence_ListKeepNew(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1609, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_external_previous = ((PyObject*)__pyx_t_9);
      __pyx_t_9 = 0;

      /* "pytact/data_reader.pyx":1610
 *         except KeyError:
 *             external_previous = list(d.external_previous)
 *             if prev := d.previous:             # <<<<<<<<<<<<<<
 *                 new_set = self._global_context_set(prev).set(prev, ())
 *             elif len(external_previous) > 0:
 */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_d), __pyx_n_s_previous); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1610, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_v_prev = __pyx_t_9;
      __Pyx_INCREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_10 < 0))) __PYX_ERR(0, 1610, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (__pyx_t_10) {

        /* "pytact/data_reader.pyx":1611
 *             external_previous = list(d.external_previous)
 *             if prev := d.previous:
 *                 new_set = self._global_context_set(prev).set(prev, ())             # <<<<<<<<<<<<<<
 *             elif len(external_previous) > 0:
 *                 ep = external_previous[0]
 */
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_global_context_set); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1611, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_11, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_prev};
          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1611, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_set); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1611, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_11);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_11, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_v_prev, __pyx_empty_tuple};
          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_11, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1611, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        }
        __pyx_v_new_set = __pyx_t_9;
        __pyx_t_9 = 0;

        /* "pytact/data_reader.pyx":1610
 *         except KeyError:
 *             external_previous = list(d.external_previous)
 *             if prev := d.previous:             # <<<<<<<<<<<<<<
 *                 new_set = self._global_context_set(prev).set(prev, ())
 *             elif len(external_previous) > 0:
 */
        goto __pyx_L11;
      }

      /* "pytact/data_reader.pyx":1612
 *             if prev := d.previous:
 *                 new_set = self._global_context_set(prev).set(prev, ())
 *             elif len(external_previous) > 0:             # <<<<<<<<<<<<<<
 *                 ep = external_previous[0]
 *                 new_set = self._global_context_set(ep).set(ep, ())
 */
      __pyx_t_13 = PyList_GET_SIZE(__pyx_v_external_previous); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1612, __pyx_L5_except_error)
      __pyx_t_10 = (__pyx_t_13 > 0);
      if (__pyx_t_10) {

        /* "pytact/data_reader.pyx":1613
 *                 new_set = self._global_context_set(prev).set(prev, ())
 *             elif len(external_previous) > 0:
 *                 ep = external_previous[0]             # <<<<<<<<<<<<<<
 *                 new_set = self._global_context_set(ep).set(ep, ())
 *                 external_previous = external_previous[1:]
 */
        __pyx_t_9 = __Pyx_GetItemInt_List(__pyx_v_external_previous, 0, long, 1, __Pyx_PyInt_From_long, 1, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1613, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_v_ep = __pyx_t_9;
        __pyx_t_9 = 0;

        /* "pytact/data_reader.pyx":1614
 *             elif len(external_previous) > 0:
 *                 ep = external_previous[0]
 *                 new_set = self._global_context_set(ep).set(ep, ())             # <<<<<<<<<<<<<<
 *                 external_previous = external_previous[1:]
 *             else:
 */
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_global_context_set); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1614, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_12 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_ep};
          __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1614, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_set); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1614, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_v_ep, __pyx_empty_tuple};
          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1614, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_v_new_set = __pyx_t_9;
        __pyx_t_9 = 0;

        /* "pytact/data_reader.pyx":1615
 *                 ep = external_previous[0]
 *                 new_set = self._global_context_set(ep).set(ep, ())
 *                 external_previous = external_previous[1:]             # <<<<<<<<<<<<<<
 *             else:
 *                 new_set = Map()
 */
        __pyx_t_9 = __Pyx_PyList_GetSlice(__pyx_v_external_previous, 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1615, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF_SET(__pyx_v_external_previous, ((PyObject*)__pyx_t_9));
        __pyx_t_9 = 0;

        /* "pytact/data_reader.pyx":1612
 *             if prev := d.previous:
 *                 new_set = self._global_context_set(prev).set(prev, ())
 *             elif len(external_previous) > 0:             # <<<<<<<<<<<<<<
 *                 ep = external_previous[0]
 *                 new_set = self._global_context_set(ep).set(ep, ())
 */
        goto __pyx_L11;
      }

      /* "pytact/data_reader.pyx":1617
 *                 external_previous = external_previous[1:]
 *             else:
 *                 new_set = Map()             # <<<<<<<<<<<<<<
 *             for ep in external_previous:
 *                 new_set = new_set.update(self._global_context_set(ep)).set(ep, ())
 */
      /*else*/ {
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Map); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1617, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_11 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_8);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_8, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[1] = {__pyx_t_11, };
          __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1617, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __pyx_v_new_set = __pyx_t_9;
        __pyx_t_9 = 0;
      }
      __pyx_L11:;

      /* "pytact/data_reader.pyx":1618
 *             else:
 *                 new_set = Map()
 *             for ep in external_previous:             # <<<<<<<<<<<<<<
 *                 new_set = new_set.update(self._global_context_set(ep)).set(ep, ())
 *             self._propagate(d, new_set)
 */
      __pyx_t_9 = __pyx_v_external_previous; __Pyx_INCREF(__pyx_t_9); __pyx_t_13 = 0;
      for (;;) {
        if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_9)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_8 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_13); __Pyx_INCREF(__pyx_t_8); __pyx_t_13++; if (unlikely((0 < 0))) __PYX_ERR(0, 1618, __pyx_L5_except_error)
        #else
        __pyx_t_8 = PySequence_ITEM(__pyx_t_9, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1618, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_ep, __pyx_t_8);
        __pyx_t_8 = 0;

        /* "pytact/data_reader.pyx":1619
 *                 new_set = Map()
 *             for ep in external_previous:
 *                 new_set = new_set.update(self._global_context_set(ep)).set(ep, ())             # <<<<<<<<<<<<<<
 *             self._propagate(d, new_set)
 *             return new_set
 */
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_new_set, __pyx_n_s_update); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1619, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_global_context_set); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1619, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_16 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_15);
          if (likely(__pyx_t_16)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_16);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_15, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_16, __pyx_v_ep};
          __pyx_t_14 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1619, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
        __pyx_t_15 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_14};
          __pyx_t_11 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1619, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_set); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1619, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
            __pyx_t_6 = 1;
          }
        }
        {
          PyObject *__pyx_callargs[3] = {__pyx_t_11, __pyx_v_ep, __pyx_empty_tuple};
          __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1619, __pyx_L5_except_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF_SET(__pyx_v_new_set, __pyx_t_8);
        __pyx_t_8 = 0;

        /* "pytact/data_reader.pyx":1618
 *             else:
 *                 new_set = Map()
 *             for ep in external_previous:             # <<<<<<<<<<<<<<
 *                 new_set = new_set.update(self._global_context_set(ep)).set(ep, ())
 *             self._propagate(d, new_set)
 */
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "pytact/data_reader.pyx":1620
 *             for ep in external_previous:
 *                 new_set = new_set.update(self._global_context_set(ep)).set(ep, ())
 *             self._propagate(d, new_set)             # <<<<<<<<<<<<<<
 *             return new_set
 * 
 */
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_propagate); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1620, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_12 = NULL;
      __pyx_t_6 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_6 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_12, ((PyObject *)__pyx_v_d), __pyx_v_new_set};
        __pyx_t_9 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1620, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

      /* "pytact/data_reader.pyx":1621
 *                 new_set = new_set.update(self._global_context_set(ep)).set(ep, ())
 *             self._propagate(d, new_set)
 *             return new_set             # <<<<<<<<<<<<<<
 * 
 *     def global_context_set(self, d: Definition) -> Map:
 */
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_new_set);
      __pyx_r = __pyx_v_new_set;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "pytact/data_reader.pyx":1606
 * 
 *     def _global_context_set(self, d: Definition) -> Map:
 *         try:             # <<<<<<<<<<<<<<
 *             return self.cache[d]
 *         except KeyError:
 */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }

  /* "pytact/data_reader.pyx":1605
 *             parent._propagate(d, context)
 * 
 *     def _global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         try:
 *             return self.cache[d]
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets._global_context_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_external_previous);
  __Pyx_XDECREF(__pyx_v_new_set);
  __Pyx_XDECREF(__pyx_v_ep);
  __Pyx_XDECREF(__pyx_v_prev);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1623
 *             return new_set
 * 
 *     def global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         """Retrieve the global context of a definition, caching the result, and intermediate results."""
 *         start = d.cluster_representative
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_7global_context_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_17GlobalContextSets_6global_context_set, "Retrieve the global context of a definition, caching the result, and intermediate results.");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17GlobalContextSets_7global_context_set = {"global_context_set", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_17GlobalContextSets_7global_context_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_17GlobalContextSets_6global_context_set};
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_7global_context_set(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("global_context_set (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_d,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_d,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1623, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1623, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("global_context_set", 1, 2, 2, 1); __PYX_ERR(0, 1623, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "global_context_set") < 0)) __PYX_ERR(0, 1623, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_d = ((struct __pyx_obj_6pytact_11data_reader_Definition *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("global_context_set", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1623, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets.global_context_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d), __pyx_ptype_6pytact_11data_reader_Definition, 0, "d", 0))) __PYX_ERR(0, 1623, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_17GlobalContextSets_6global_context_set(__pyx_self, __pyx_v_self, __pyx_v_d);

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

static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_6global_context_set(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d) {
  PyObject *__pyx_v_start = NULL;
  PyObject *__pyx_v_context = 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;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("global_context_set", 0);

  /* "pytact/data_reader.pyx":1625
 *     def global_context_set(self, d: Definition) -> Map:
 *         """Retrieve the global context of a definition, caching the result, and intermediate results."""
 *         start = d.cluster_representative             # <<<<<<<<<<<<<<
 *         context = self._global_context_set(start)
 *         if isinstance(start.kind, (Inductive, Constructor, Projection)):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_d), __pyx_n_s_cluster_representative); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_start = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1626
 *         """Retrieve the global context of a definition, caching the result, and intermediate results."""
 *         start = d.cluster_representative
 *         context = self._global_context_set(start)             # <<<<<<<<<<<<<<
 *         if isinstance(start.kind, (Inductive, Constructor, Projection)):
 *             context = context.set(start, ())
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_global_context_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1626, __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;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_start};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_v_context = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1627
 *         start = d.cluster_representative
 *         context = self._global_context_set(start)
 *         if isinstance(start.kind, (Inductive, Constructor, Projection)):             # <<<<<<<<<<<<<<
 *             context = context.set(start, ())
 *         return context
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_start, __pyx_n_s_kind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Inductive); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Constructor); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Projection); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyObject_IsInstance(__pyx_t_1, __pyx_t_2); 
  if (!__pyx_t_7) {
  } else {
    __pyx_t_6 = __pyx_t_7;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_7 = PyObject_IsInstance(__pyx_t_1, __pyx_t_3); 
  if (!__pyx_t_7) {
  } else {
    __pyx_t_6 = __pyx_t_7;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_7 = PyObject_IsInstance(__pyx_t_1, __pyx_t_5); 
  __pyx_t_6 = __pyx_t_7;
  __pyx_L4_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {

    /* "pytact/data_reader.pyx":1628
 *         context = self._global_context_set(start)
 *         if isinstance(start.kind, (Inductive, Constructor, Projection)):
 *             context = context.set(start, ())             # <<<<<<<<<<<<<<
 *         return context
 * 
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_context, __pyx_n_s_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1628, __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;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_start, __pyx_empty_tuple};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 2+__pyx_t_4);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1628, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF_SET(__pyx_v_context, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":1627
 *         start = d.cluster_representative
 *         context = self._global_context_set(start)
 *         if isinstance(start.kind, (Inductive, Constructor, Projection)):             # <<<<<<<<<<<<<<
 *             context = context.set(start, ())
 *         return context
 */
  }

  /* "pytact/data_reader.pyx":1629
 *         if isinstance(start.kind, (Inductive, Constructor, Projection)):
 *             context = context.set(start, ())
 *         return context             # <<<<<<<<<<<<<<
 * 
 *     @contextmanager
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_context);
  __pyx_r = __pyx_v_context;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1623
 *             return new_set
 * 
 *     def global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         """Retrieve the global context of a definition, caching the result, and intermediate results."""
 *         start = d.cluster_representative
 */

  /* 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("pytact.data_reader.GlobalContextSets.global_context_set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_XDECREF(__pyx_v_context);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_6pytact_11data_reader_17GlobalContextSets_10generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1631
 *         return context
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     def sub_context(self, propagate: Callable[[Definition], bool]) -> Generator[GlobalContextSets, None, None]:
 *         """Create a sub-context with a separate cache from it's parent, but sharing any info that was
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_9sub_context(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_17GlobalContextSets_8sub_context, "Create a sub-context with a separate cache from it's parent, but sharing any info that was\n        already present in the parent's cache.\n\n        For any intermediate results for a definition `d` for which `propagate(d)` evaluates to true,\n        the result is propagated to the parent's cache.");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17GlobalContextSets_9sub_context = {"sub_context", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_17GlobalContextSets_9sub_context, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_17GlobalContextSets_8sub_context};
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_9sub_context(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  PyObject *__pyx_v_propagate = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sub_context (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_propagate_2,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_propagate_2,0};
    #endif
    PyObject* values[2] = {0,0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1631, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_propagate_2)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1631, __pyx_L3_error)
        else {
          __Pyx_RaiseArgtupleInvalid("sub_context", 1, 2, 2, 1); __PYX_ERR(0, 1631, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sub_context") < 0)) __PYX_ERR(0, 1631, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
    }
    __pyx_v_self = values[0];
    __pyx_v_propagate = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sub_context", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1631, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets.sub_context", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_6pytact_11data_reader_17GlobalContextSets_8sub_context(__pyx_self, __pyx_v_self, __pyx_v_propagate);

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

static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_8sub_context(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_propagate) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sub_context", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_13_sub_context(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1631, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_propagate = __pyx_v_propagate;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_propagate);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_propagate);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_17GlobalContextSets_10generator11, __pyx_codeobj__30, (PyObject *) __pyx_cur_scope, __pyx_n_s_sub_context, __pyx_n_s_GlobalContextSets_sub_context, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1631, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets.sub_context", __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_6pytact_11data_reader_17GlobalContextSets_10generator11(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *__pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sub_context", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L4_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, 1631, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1638
 *         For any intermediate results for a definition `d` for which `propagate(d)` evaluates to true,
 *         the result is propagated to the parent's cache."""
 *         yield GlobalContextSets(self.cache, self, propagate)             # <<<<<<<<<<<<<<
 * 
 *     @contextmanager
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_GlobalContextSets); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self, __pyx_n_s_cache); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  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_5 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_t_3, __pyx_cur_scope->__pyx_v_self, __pyx_cur_scope->__pyx_v_propagate};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 3+__pyx_t_5);
    __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, 1638, __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;
  __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_L4_resume_from_yield:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1638, __pyx_L1_error)
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* "pytact/data_reader.pyx":1631
 *         return context
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     def sub_context(self, propagate: Callable[[Definition], bool]) -> Generator[GlobalContextSets, None, None]:
 *         """Create a sub-context with a separate cache from it's parent, but sharing any info that was
 */

  /* 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_4);
  __Pyx_AddTraceback("sub_context", __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;
}
static PyObject *__pyx_gb_6pytact_11data_reader_17GlobalContextSets_13generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "pytact/data_reader.pyx":1640
 *         yield GlobalContextSets(self.cache, self, propagate)
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_12new_context(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_17GlobalContextSets_11new_context, "Crate a new caching context where global-context-set's can be retrieved and cached.");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17GlobalContextSets_12new_context = {"new_context", (PyCFunction)__pyx_pw_6pytact_11data_reader_17GlobalContextSets_12new_context, METH_NOARGS, __pyx_doc_6pytact_11data_reader_17GlobalContextSets_11new_context};
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_12new_context(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("new_context (wrapper)", 0);
  __pyx_r = __pyx_pf_6pytact_11data_reader_17GlobalContextSets_11new_context(__pyx_self);

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

/* "pytact/data_reader.pyx":1644
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 *         """Crate a new caching context where global-context-set's can be retrieved and cached."""
 *         yield GlobalContextSets(Map(), None, lambda _: False)             # <<<<<<<<<<<<<<
 * 
 * cdef struct GlobalNode:
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_11new_context_lambda(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_6pytact_11data_reader_17GlobalContextSets_11new_context_lambda = {"lambda", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_17GlobalContextSets_11new_context_lambda, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_6pytact_11data_reader_17GlobalContextSets_11new_context_lambda(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v__ = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s__31,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__31,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s__31)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1644, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "lambda") < 0)) __PYX_ERR(0, 1644, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v__ = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("lambda", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1644, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets.new_context.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_lambda_funcdef_lambda(__pyx_self, __pyx_v__);

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

static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v__) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("lambda", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_False);
  __pyx_r = Py_False;
  goto __pyx_L0;

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

/* "pytact/data_reader.pyx":1640
 *         yield GlobalContextSets(self.cache, self, propagate)
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 */

static PyObject *__pyx_pf_6pytact_11data_reader_17GlobalContextSets_11new_context(CYTHON_UNUSED PyObject *__pyx_self) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("new_context", 0);
  __pyx_cur_scope = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_14_new_context(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 1640, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_6pytact_11data_reader_17GlobalContextSets_13generator12, __pyx_codeobj__32, (PyObject *) __pyx_cur_scope, __pyx_n_s_new_context, __pyx_n_s_GlobalContextSets_new_context, __pyx_n_s_pytact_data_reader); if (unlikely(!gen)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("pytact.data_reader.GlobalContextSets.new_context", __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_6pytact_11data_reader_17GlobalContextSets_13generator12(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("new_context", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L4_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, 1640, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1644
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 *         """Crate a new caching context where global-context-set's can be retrieved and cached."""
 *         yield GlobalContextSets(Map(), None, lambda _: False)             # <<<<<<<<<<<<<<
 * 
 * cdef struct GlobalNode:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_GlobalContextSets); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Map); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[1] = {__pyx_t_5, };
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17GlobalContextSets_11new_context_lambda, 0, __pyx_n_s_GlobalContextSets_new_context_lo, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  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_6 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_t_3, Py_None, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1644, __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;
  __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_L4_resume_from_yield:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 1644, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1640
 *         yield GlobalContextSets(self.cache, self, propagate)
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 */

  /* 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_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("new_context", __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;
}

/* "pytact/data_reader.pyx":1650
 *     NodeId nodeid
 * 
 * def node_dependencies(Node n, deps: set[Definition] | None = None) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Node` `n`, calculate the set of `Definition`'s that are directly reachable
 *     from `n`. Transitively reachable definitions are not included.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_37node_dependencies(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_36node_dependencies, "Given a `Node` `n`, calculate the set of `Definition`'s that are directly reachable\n    from `n`. Transitively reachable definitions are not included.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_37node_dependencies = {"node_dependencies", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_37node_dependencies, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_36node_dependencies};
static PyObject *__pyx_pw_6pytact_11data_reader_37node_dependencies(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_n = 0;
  PyObject *__pyx_v_deps = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("node_dependencies (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,&__pyx_n_s_deps,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,&__pyx_n_s_deps,0};
    #endif
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)((PyObject *)Py_None));
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1650, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_deps);
          if (value) { values[1] = value; kw_args--; }
          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1650, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "node_dependencies") < 0)) __PYX_ERR(0, 1650, __pyx_L3_error)
      }
    } else {
      switch (__pyx_nargs) {
        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_n = ((struct __pyx_obj_6pytact_11data_reader_Node *)values[0]);
    __pyx_v_deps = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("node_dependencies", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 1650, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.node_dependencies", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_n), __pyx_ptype_6pytact_11data_reader_Node, 1, "n", 0))) __PYX_ERR(0, 1650, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_36node_dependencies(__pyx_self, __pyx_v_n, __pyx_v_deps);

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

static PyObject *__pyx_pf_6pytact_11data_reader_36node_dependencies(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_Node *__pyx_v_n, PyObject *__pyx_v_deps) {
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_v_graph_index;
  std::unordered_set<int64_t>  __pyx_v_seen;
  std::stack<struct __pyx_t_6pytact_11data_reader_GlobalNode>  __pyx_v_stack;
  struct __pyx_t_6pytact_11data_reader_GlobalNode __pyx_v_current_node;
  uint32_t __pyx_v_children_index;
  uint32_t __pyx_v_children_limit;
  uint64_t __pyx_v_node_hash;
  Graph::Node::Reader __pyx_v_node_contents;
  Graph::Node::Label::Reader __pyx_v_node_label;
   ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader __pyx_v_edges;
  Graph::EdgeTarget::Target::Reader __pyx_v_edge_target;
  uint32_t __pyx_v_child_graph;
  struct __pyx_t_6pytact_11data_reader_GlobalNode __pyx_v_child;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  struct __pyx_t_6pytact_11data_reader_GraphIndex *__pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_t_6pytact_11data_reader_GlobalNode __pyx_t_4;
  Graph::Node::Reader __pyx_t_5;
  Graph::Node::Label::Reader __pyx_t_6;
  bool __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  uint32_t __pyx_t_12;
  uint16_t __pyx_t_13;
  Graph::EdgeTarget::Reader __pyx_t_14;
  Graph::EdgeTarget::Target::Reader __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("node_dependencies", 0);
  __Pyx_INCREF(__pyx_v_deps);

  /* "pytact/data_reader.pyx":1654
 *     from `n`. Transitively reachable definitions are not included.
 *     """
 *     cdef GraphIndex *graph_index = n.graph_index             # <<<<<<<<<<<<<<
 *     cdef unordered_set[int64_t] seen
 *     cdef stack[GlobalNode] stack
 */
  __pyx_t_1 = __pyx_v_n->graph_index;
  __pyx_v_graph_index = __pyx_t_1;

  /* "pytact/data_reader.pyx":1661
 *     cdef uint32_t children_limit
 * 
 *     if deps is None:             # <<<<<<<<<<<<<<
 *         deps = set()
 *     stack.push(GlobalNode(n.graph, n.nodeid))
 */
  __pyx_t_2 = (__pyx_v_deps == Py_None);
  if (__pyx_t_2) {

    /* "pytact/data_reader.pyx":1662
 * 
 *     if deps is None:
 *         deps = set()             # <<<<<<<<<<<<<<
 *     stack.push(GlobalNode(n.graph, n.nodeid))
 *     while not stack.empty():
 */
    __pyx_t_3 = PySet_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1662, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_deps, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "pytact/data_reader.pyx":1661
 *     cdef uint32_t children_limit
 * 
 *     if deps is None:             # <<<<<<<<<<<<<<
 *         deps = set()
 *     stack.push(GlobalNode(n.graph, n.nodeid))
 */
  }

  /* "pytact/data_reader.pyx":1663
 *     if deps is None:
 *         deps = set()
 *     stack.push(GlobalNode(n.graph, n.nodeid))             # <<<<<<<<<<<<<<
 *     while not stack.empty():
 *         current_node = stack.top()
 */
  __pyx_t_4.graphid = __pyx_v_n->graph;
  __pyx_t_4.nodeid = __pyx_v_n->nodeid;
  try {
    __pyx_v_stack.push(__pyx_t_4);
  } catch(...) {
    __Pyx_CppExn2PyErr();
    __PYX_ERR(0, 1663, __pyx_L1_error)
  }

  /* "pytact/data_reader.pyx":1664
 *         deps = set()
 *     stack.push(GlobalNode(n.graph, n.nodeid))
 *     while not stack.empty():             # <<<<<<<<<<<<<<
 *         current_node = stack.top()
 *         stack.pop()
 */
  while (1) {
    __pyx_t_2 = (!__pyx_v_stack.empty());
    if (!__pyx_t_2) break;

    /* "pytact/data_reader.pyx":1665
 *     stack.push(GlobalNode(n.graph, n.nodeid))
 *     while not stack.empty():
 *         current_node = stack.top()             # <<<<<<<<<<<<<<
 *         stack.pop()
 *         node_hash = (<uint64_t> current_node.graphid) << 32 | current_node.nodeid
 */
    __pyx_v_current_node = __pyx_v_stack.top();

    /* "pytact/data_reader.pyx":1666
 *     while not stack.empty():
 *         current_node = stack.top()
 *         stack.pop()             # <<<<<<<<<<<<<<
 *         node_hash = (<uint64_t> current_node.graphid) << 32 | current_node.nodeid
 *         if seen.find(node_hash) != seen.end():
 */
    __pyx_v_stack.pop();

    /* "pytact/data_reader.pyx":1667
 *         current_node = stack.top()
 *         stack.pop()
 *         node_hash = (<uint64_t> current_node.graphid) << 32 | current_node.nodeid             # <<<<<<<<<<<<<<
 *         if seen.find(node_hash) != seen.end():
 *             continue
 */
    __pyx_v_node_hash = ((((uint64_t)__pyx_v_current_node.graphid) << 32) | __pyx_v_current_node.nodeid);

    /* "pytact/data_reader.pyx":1668
 *         stack.pop()
 *         node_hash = (<uint64_t> current_node.graphid) << 32 | current_node.nodeid
 *         if seen.find(node_hash) != seen.end():             # <<<<<<<<<<<<<<
 *             continue
 *         seen.insert(node_hash)
 */
    __pyx_t_2 = (__pyx_v_seen.find(__pyx_v_node_hash) != __pyx_v_seen.end());
    if (__pyx_t_2) {

      /* "pytact/data_reader.pyx":1669
 *         node_hash = (<uint64_t> current_node.graphid) << 32 | current_node.nodeid
 *         if seen.find(node_hash) != seen.end():
 *             continue             # <<<<<<<<<<<<<<
 *         seen.insert(node_hash)
 *         node_contents = graph_index.nodes[current_node.graphid][current_node.nodeid]
 */
      goto __pyx_L4_continue;

      /* "pytact/data_reader.pyx":1668
 *         stack.pop()
 *         node_hash = (<uint64_t> current_node.graphid) << 32 | current_node.nodeid
 *         if seen.find(node_hash) != seen.end():             # <<<<<<<<<<<<<<
 *             continue
 *         seen.insert(node_hash)
 */
    }

    /* "pytact/data_reader.pyx":1670
 *         if seen.find(node_hash) != seen.end():
 *             continue
 *         seen.insert(node_hash)             # <<<<<<<<<<<<<<
 *         node_contents = graph_index.nodes[current_node.graphid][current_node.nodeid]
 *         node_label = node_contents.getLabel()
 */
    try {
      __pyx_v_seen.insert(__pyx_v_node_hash);
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(0, 1670, __pyx_L1_error)
    }

    /* "pytact/data_reader.pyx":1671
 *             continue
 *         seen.insert(node_hash)
 *         node_contents = graph_index.nodes[current_node.graphid][current_node.nodeid]             # <<<<<<<<<<<<<<
 *         node_label = node_contents.getLabel()
 *         if node_label.isDefinition():
 */
    try {
      __pyx_t_5 = (__pyx_v_graph_index->nodes[__pyx_v_current_node.graphid])[__pyx_v_current_node.nodeid];
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 1671, __pyx_L1_error)
    }
    __pyx_v_node_contents = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_5);

    /* "pytact/data_reader.pyx":1672
 *         seen.insert(node_hash)
 *         node_contents = graph_index.nodes[current_node.graphid][current_node.nodeid]
 *         node_label = node_contents.getLabel()             # <<<<<<<<<<<<<<
 *         if node_label.isDefinition():
 *             deps.add(Node.init(current_node.graphid, current_node.nodeid, graph_index).definition)
 */
    try {
      __pyx_t_6 = __pyx_v_node_contents.getLabel();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 1672, __pyx_L1_error)
    }
    __pyx_v_node_label = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_6);

    /* "pytact/data_reader.pyx":1673
 *         node_contents = graph_index.nodes[current_node.graphid][current_node.nodeid]
 *         node_label = node_contents.getLabel()
 *         if node_label.isDefinition():             # <<<<<<<<<<<<<<
 *             deps.add(Node.init(current_node.graphid, current_node.nodeid, graph_index).definition)
 *             continue
 */
    try {
      __pyx_t_7 = __pyx_v_node_label.isDefinition();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 1673, __pyx_L1_error)
    }
    __pyx_t_2 = (__pyx_t_7 != 0);
    if (__pyx_t_2) {

      /* "pytact/data_reader.pyx":1674
 *         node_label = node_contents.getLabel()
 *         if node_label.isDefinition():
 *             deps.add(Node.init(current_node.graphid, current_node.nodeid, graph_index).definition)             # <<<<<<<<<<<<<<
 *             continue
 *         children_index = node_contents.getChildrenIndex()
 */
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_deps, __pyx_n_s_add); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1674, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __pyx_f_6pytact_11data_reader_4Node_init(__pyx_v_current_node.graphid, __pyx_v_current_node.nodeid, __pyx_v_graph_index); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1674, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_definition); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1674, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = NULL;
      __pyx_t_11 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_11 = 1;
        }
      }
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_10};
        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_11, 1+__pyx_t_11);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1674, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

      /* "pytact/data_reader.pyx":1675
 *         if node_label.isDefinition():
 *             deps.add(Node.init(current_node.graphid, current_node.nodeid, graph_index).definition)
 *             continue             # <<<<<<<<<<<<<<
 *         children_index = node_contents.getChildrenIndex()
 *         children_limit = children_index + (<uint32_t> node_contents.getChildrenCount())
 */
      goto __pyx_L4_continue;

      /* "pytact/data_reader.pyx":1673
 *         node_contents = graph_index.nodes[current_node.graphid][current_node.nodeid]
 *         node_label = node_contents.getLabel()
 *         if node_label.isDefinition():             # <<<<<<<<<<<<<<
 *             deps.add(Node.init(current_node.graphid, current_node.nodeid, graph_index).definition)
 *             continue
 */
    }

    /* "pytact/data_reader.pyx":1676
 *             deps.add(Node.init(current_node.graphid, current_node.nodeid, graph_index).definition)
 *             continue
 *         children_index = node_contents.getChildrenIndex()             # <<<<<<<<<<<<<<
 *         children_limit = children_index + (<uint32_t> node_contents.getChildrenCount())
 *         edges = graph_index.edges[current_node.graphid]
 */
    try {
      __pyx_t_12 = __pyx_v_node_contents.getChildrenIndex();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 1676, __pyx_L1_error)
    }
    __pyx_v_children_index = __pyx_t_12;

    /* "pytact/data_reader.pyx":1677
 *             continue
 *         children_index = node_contents.getChildrenIndex()
 *         children_limit = children_index + (<uint32_t> node_contents.getChildrenCount())             # <<<<<<<<<<<<<<
 *         edges = graph_index.edges[current_node.graphid]
 *         while children_index < children_limit:
 */
    try {
      __pyx_t_13 = __pyx_v_node_contents.getChildrenCount();
    } catch(...) {
      reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
      __PYX_ERR(0, 1677, __pyx_L1_error)
    }
    __pyx_v_children_limit = (__pyx_v_children_index + ((uint32_t)__pyx_t_13));

    /* "pytact/data_reader.pyx":1678
 *         children_index = node_contents.getChildrenIndex()
 *         children_limit = children_index + (<uint32_t> node_contents.getChildrenCount())
 *         edges = graph_index.edges[current_node.graphid]             # <<<<<<<<<<<<<<
 *         while children_index < children_limit:
 *             edge_target = edges[children_index].getTarget()
 */
    __pyx_v_edges = (__pyx_v_graph_index->edges[__pyx_v_current_node.graphid]);

    /* "pytact/data_reader.pyx":1679
 *         children_limit = children_index + (<uint32_t> node_contents.getChildrenCount())
 *         edges = graph_index.edges[current_node.graphid]
 *         while children_index < children_limit:             # <<<<<<<<<<<<<<
 *             edge_target = edges[children_index].getTarget()
 *             child_graph = graph_index.local_to_global[current_node.graphid][edge_target.getDepIndex()]
 */
    while (1) {
      __pyx_t_2 = (__pyx_v_children_index < __pyx_v_children_limit);
      if (!__pyx_t_2) break;

      /* "pytact/data_reader.pyx":1680
 *         edges = graph_index.edges[current_node.graphid]
 *         while children_index < children_limit:
 *             edge_target = edges[children_index].getTarget()             # <<<<<<<<<<<<<<
 *             child_graph = graph_index.local_to_global[current_node.graphid][edge_target.getDepIndex()]
 *             child = GlobalNode(child_graph, edge_target.getNodeIndex())
 */
      try {
        __pyx_t_14 = __pyx_v_edges[__pyx_v_children_index];
      } catch(...) {
        reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
        __PYX_ERR(0, 1680, __pyx_L1_error)
      }
      try {
        __pyx_t_15 = __pyx_t_14.getTarget();
      } catch(...) {
        reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
        __PYX_ERR(0, 1680, __pyx_L1_error)
      }
      __pyx_v_edge_target = __PYX_STD_MOVE_IF_SUPPORTED(__pyx_t_15);

      /* "pytact/data_reader.pyx":1681
 *         while children_index < children_limit:
 *             edge_target = edges[children_index].getTarget()
 *             child_graph = graph_index.local_to_global[current_node.graphid][edge_target.getDepIndex()]             # <<<<<<<<<<<<<<
 *             child = GlobalNode(child_graph, edge_target.getNodeIndex())
 *             stack.push(child)
 */
      try {
        __pyx_t_13 = __pyx_v_edge_target.getDepIndex();
      } catch(...) {
        reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
        __PYX_ERR(0, 1681, __pyx_L1_error)
      }
      __pyx_v_child_graph = ((__pyx_v_graph_index->local_to_global[__pyx_v_current_node.graphid])[__pyx_t_13]);

      /* "pytact/data_reader.pyx":1682
 *             edge_target = edges[children_index].getTarget()
 *             child_graph = graph_index.local_to_global[current_node.graphid][edge_target.getDepIndex()]
 *             child = GlobalNode(child_graph, edge_target.getNodeIndex())             # <<<<<<<<<<<<<<
 *             stack.push(child)
 *             children_index += 1
 */
      __pyx_t_4.graphid = __pyx_v_child_graph;
      try {
        __pyx_t_12 = __pyx_v_edge_target.getNodeIndex();
      } catch(...) {
        reraise_kj_exception(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");
        __PYX_ERR(0, 1682, __pyx_L1_error)
      }
      __pyx_t_4.nodeid = __pyx_t_12;
      __pyx_v_child = __pyx_t_4;

      /* "pytact/data_reader.pyx":1683
 *             child_graph = graph_index.local_to_global[current_node.graphid][edge_target.getDepIndex()]
 *             child = GlobalNode(child_graph, edge_target.getNodeIndex())
 *             stack.push(child)             # <<<<<<<<<<<<<<
 *             children_index += 1
 *     return deps
 */
      try {
        __pyx_v_stack.push(__pyx_v_child);
      } catch(...) {
        __Pyx_CppExn2PyErr();
        __PYX_ERR(0, 1683, __pyx_L1_error)
      }

      /* "pytact/data_reader.pyx":1684
 *             child = GlobalNode(child_graph, edge_target.getNodeIndex())
 *             stack.push(child)
 *             children_index += 1             # <<<<<<<<<<<<<<
 *     return deps
 * 
 */
      __pyx_v_children_index = (__pyx_v_children_index + 1);
    }
    __pyx_L4_continue:;
  }

  /* "pytact/data_reader.pyx":1685
 *             stack.push(child)
 *             children_index += 1
 *     return deps             # <<<<<<<<<<<<<<
 * 
 * def definition_dependencies(d: Definition) -> set[Definition]:
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_deps);
  __pyx_r = __pyx_v_deps;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1650
 *     NodeId nodeid
 * 
 * def node_dependencies(Node n, deps: set[Definition] | None = None) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Node` `n`, calculate the set of `Definition`'s that are directly reachable
 *     from `n`. Transitively reachable definitions are not included.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("pytact.data_reader.node_dependencies", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_deps);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "pytact/data_reader.pyx":1687
 *     return deps
 * 
 * def definition_dependencies(d: Definition) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Definition` `d`, calculate the set of `Definition`'s that are directly reachable for `d`.
 *     Transitively reachable definitions are not included nor is `d` itself.
 */

/* Python wrapper */
static PyObject *__pyx_pw_6pytact_11data_reader_39definition_dependencies(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_6pytact_11data_reader_38definition_dependencies, "Given a `Definition` `d`, calculate the set of `Definition`'s that are directly reachable for `d`.\n    Transitively reachable definitions are not included nor is `d` itself.\n    ");
static PyMethodDef __pyx_mdef_6pytact_11data_reader_39definition_dependencies = {"definition_dependencies", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_39definition_dependencies, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_38definition_dependencies};
static PyObject *__pyx_pw_6pytact_11data_reader_39definition_dependencies(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED const Py_ssize_t __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("definition_dependencies (wrapper)", 0);
  {
    #if CYTHON_USE_MODULE_STATE
    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_d,0};
    #else
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_d,0};
    #endif
    PyObject* values[1] = {0};
    if (__pyx_kwds) {
      Py_ssize_t kw_args;
      switch (__pyx_nargs) {
        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
      switch (__pyx_nargs) {
        case  0:
        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_d)) != 0)) kw_args--;
        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1687, __pyx_L3_error)
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        const Py_ssize_t kwd_pos_args = __pyx_nargs;
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "definition_dependencies") < 0)) __PYX_ERR(0, 1687, __pyx_L3_error)
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
    }
    __pyx_v_d = ((struct __pyx_obj_6pytact_11data_reader_Definition *)values[0]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("definition_dependencies", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1687, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("pytact.data_reader.definition_dependencies", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d), __pyx_ptype_6pytact_11data_reader_Definition, 0, "d", 0))) __PYX_ERR(0, 1687, __pyx_L1_error)
  __pyx_r = __pyx_pf_6pytact_11data_reader_38definition_dependencies(__pyx_self, __pyx_v_d);

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

static PyObject *__pyx_pf_6pytact_11data_reader_38definition_dependencies(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_6pytact_11data_reader_Definition *__pyx_v_d) {
  PyObject *__pyx_v_deps = NULL;
  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
  PyObject *__pyx_v_c = 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;
  PyObject *(*__pyx_t_8)(PyObject *);
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("definition_dependencies", 0);

  /* "pytact/data_reader.pyx":1691
 *     Transitively reachable definitions are not included nor is `d` itself.
 *     """
 *     deps = set()             # <<<<<<<<<<<<<<
 *     for _, c in d.node.children:
 *         node_dependencies(c, deps)
 */
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1691, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_deps = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "pytact/data_reader.pyx":1692
 *     """
 *     deps = set()
 *     for _, c in d.node.children:             # <<<<<<<<<<<<<<
 *         node_dependencies(c, deps)
 *     return deps
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_d->node), __pyx_n_s_children); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  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_3 = 0;
    __pyx_t_4 = NULL;
  } else {
    __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1692, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  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_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1692, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1692, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_3 >= 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_3); __Pyx_INCREF(__pyx_t_1); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1692, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1692, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_4(__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, 1692, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1692, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7);
      index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1692, __pyx_L1_error)
      __pyx_t_8 = NULL;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L6_unpacking_done;
      __pyx_L5_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_8 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1692, __pyx_L1_error)
      __pyx_L6_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v__, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_6);
    __pyx_t_6 = 0;

    /* "pytact/data_reader.pyx":1693
 *     deps = set()
 *     for _, c in d.node.children:
 *         node_dependencies(c, deps)             # <<<<<<<<<<<<<<
 *     return deps
 */
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_node_dependencies); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1693, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = NULL;
    __pyx_t_9 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
        __pyx_t_9 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_v_c, __pyx_v_deps};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_9, 2+__pyx_t_9);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "pytact/data_reader.pyx":1692
 *     """
 *     deps = set()
 *     for _, c in d.node.children:             # <<<<<<<<<<<<<<
 *         node_dependencies(c, deps)
 *     return deps
 */
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1694
 *     for _, c in d.node.children:
 *         node_dependencies(c, deps)
 *     return deps             # <<<<<<<<<<<<<<
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_deps);
  __pyx_r = __pyx_v_deps;
  goto __pyx_L0;

  /* "pytact/data_reader.pyx":1687
 *     return deps
 * 
 * def definition_dependencies(d: Definition) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Definition` `d`, calculate the set of `Definition`'s that are directly reachable for `d`.
 *     Transitively reachable definitions are not included nor is `d` itself.
 */

  /* 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("pytact.data_reader.definition_dependencies", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_deps);
  __Pyx_XDECREF(__pyx_v__);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "capnp/includes/capnp_cpp.pxd":127
 *         VoidPromise afterDelay(Duration delay)
 * 
 * cdef inline Duration Nanoseconds(int64_t nanos):             # <<<<<<<<<<<<<<
 *     return NANOSECONDS * nanos
 * 
 */

static CYTHON_INLINE  ::kj::Duration __pyx_f_5capnp_8includes_9capnp_cpp_Nanoseconds(int64_t __pyx_v_nanos) {
   ::kj::Duration __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Nanoseconds", 0);

  /* "capnp/includes/capnp_cpp.pxd":128
 * 
 * cdef inline Duration Nanoseconds(int64_t nanos):
 *     return NANOSECONDS * nanos             # <<<<<<<<<<<<<<
 * 
 * cdef extern from "kj/async-io.h" namespace " ::kj":
 */
  __pyx_r = ( ::kj::NANOSECONDS * __pyx_v_nanos);
  goto __pyx_L0;

  /* "capnp/includes/capnp_cpp.pxd":127
 *         VoidPromise afterDelay(Duration delay)
 * 
 * cdef inline Duration Nanoseconds(int64_t nanos):             # <<<<<<<<<<<<<<
 *     return NANOSECONDS * nanos
 * 
 */

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

/* "vector.to_py":66
 * 
 * @cname("__pyx_convert_vector_to_py_uint32_t")
 * cdef object __pyx_convert_vector_to_py_uint32_t(const vector[X]& v):             # <<<<<<<<<<<<<<
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 */

static PyObject *__pyx_convert_vector_to_py_uint32_t(std::vector<uint32_t>  const &__pyx_v_v) {
  PyObject *__pyx_v_o = NULL;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_to_py_uint32_t", 0);

  /* "vector.to_py":67
 * @cname("__pyx_convert_vector_to_py_uint32_t")
 * cdef object __pyx_convert_vector_to_py_uint32_t(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 * 
 */
  __pyx_t_1 = (__pyx_v_v.size() > ((size_t)PY_SSIZE_T_MAX));
  if (unlikely(__pyx_t_1)) {

    /* "vector.to_py":68
 * cdef object __pyx_convert_vector_to_py_uint32_t(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     o = PyList_New(<Py_ssize_t> v.size())
 */
    PyErr_NoMemory(); __PYX_ERR(1, 68, __pyx_L1_error)

    /* "vector.to_py":67
 * @cname("__pyx_convert_vector_to_py_uint32_t")
 * cdef object __pyx_convert_vector_to_py_uint32_t(const vector[X]& v):
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:             # <<<<<<<<<<<<<<
 *         raise MemoryError()
 * 
 */
  }

  /* "vector.to_py":70
 *         raise MemoryError()
 * 
 *     o = PyList_New(<Py_ssize_t> v.size())             # <<<<<<<<<<<<<<
 * 
 *     cdef Py_ssize_t i
 */
  __pyx_t_2 = PyList_New(((Py_ssize_t)__pyx_v_v.size())); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_o = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "vector.to_py":75
 *     cdef object item
 * 
 *     for i in range(v.size()):             # <<<<<<<<<<<<<<
 *         item = v[i]
 *         Py_INCREF(item)
 */
  __pyx_t_3 = __pyx_v_v.size();
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "vector.to_py":76
 * 
 *     for i in range(v.size()):
 *         item = v[i]             # <<<<<<<<<<<<<<
 *         Py_INCREF(item)
 *         PyList_SET_ITEM(o, i, item)
 */
    __pyx_t_2 = __Pyx_PyInt_From_uint32_t((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 76, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "vector.to_py":77
 *     for i in range(v.size()):
 *         item = v[i]
 *         Py_INCREF(item)             # <<<<<<<<<<<<<<
 *         PyList_SET_ITEM(o, i, item)
 * 
 */
    Py_INCREF(__pyx_v_item);

    /* "vector.to_py":78
 *         item = v[i]
 *         Py_INCREF(item)
 *         PyList_SET_ITEM(o, i, item)             # <<<<<<<<<<<<<<
 * 
 *     return o
 */
    PyList_SET_ITEM(__pyx_v_o, __pyx_v_i, __pyx_v_item);
  }

  /* "vector.to_py":80
 *         PyList_SET_ITEM(o, i, item)
 * 
 *     return o             # <<<<<<<<<<<<<<
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_o);
  __pyx_r = __pyx_v_o;
  goto __pyx_L0;

  /* "vector.to_py":66
 * 
 * @cname("__pyx_convert_vector_to_py_uint32_t")
 * cdef object __pyx_convert_vector_to_py_uint32_t(const vector[X]& v):             # <<<<<<<<<<<<<<
 *     if v.size() > <size_t> PY_SSIZE_T_MAX:
 *         raise MemoryError()
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("vector.to_py.__pyx_convert_vector_to_py_uint32_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_o);
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "vector.from_py":45
 * 
 * @cname("__pyx_convert_vector_from_py_uint32_t")
 * cdef vector[X] __pyx_convert_vector_from_py_uint32_t(object o) except *:             # <<<<<<<<<<<<<<
 *     cdef vector[X] v
 *     for item in o:
 */

static std::vector<uint32_t>  __pyx_convert_vector_from_py_uint32_t(PyObject *__pyx_v_o) {
  std::vector<uint32_t>  __pyx_v_v;
  PyObject *__pyx_v_item = NULL;
  std::vector<uint32_t>  __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;
  uint32_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_from_py_uint32_t", 0);

  /* "vector.from_py":47
 * cdef vector[X] __pyx_convert_vector_from_py_uint32_t(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 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); 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_PyInt_As_uint32_t(__pyx_v_item); if (unlikely((__pyx_t_5 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 48, __pyx_L1_error)
    try {
      __pyx_v_v.push_back(((uint32_t)__pyx_t_5));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(1, 48, __pyx_L1_error)
    }

    /* "vector.from_py":47
 * cdef vector[X] __pyx_convert_vector_from_py_uint32_t(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_uint32_t")
 * cdef vector[X] __pyx_convert_vector_from_py_uint32_t(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_uint32_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static std::vector<std::vector<uint32_t> >  __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(PyObject *__pyx_v_o) {
  std::vector<std::vector<uint32_t> >  __pyx_v_v;
  PyObject *__pyx_v_item = NULL;
  std::vector<std::vector<uint32_t> >  __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::vector<uint32_t>  __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___", 0);

  /* "vector.from_py":47
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(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 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); 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_vector_from_py_uint32_t(__pyx_v_item); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 48, __pyx_L1_error)
    try {
      __pyx_v_v.push_back(((std::vector<uint32_t> )__pyx_t_5));
    } catch(...) {
      __Pyx_CppExn2PyErr();
      __PYX_ERR(1, 48, __pyx_L1_error)
    }

    /* "vector.from_py":47
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(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_vector_3c_uint32_t_3e___")
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(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_vector_3c_uint32_t_3e___", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_tp_new_6pytact_11data_reader_LowlevelDataReader(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)o);
  new((void*)&(p->graph_index)) struct __pyx_t_6pytact_11data_reader_GraphIndex();
  p->graphs = Py_None; Py_INCREF(Py_None);
  p->graphid_by_filename = Py_None; Py_INCREF(Py_None);
  p->graph_files = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_LowlevelDataReader(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *p = (struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !_PyGC_FINALIZED(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_LowlevelDataReader) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->graph_index);
  Py_CLEAR(p->graphs);
  Py_CLEAR(p->graphid_by_filename);
  Py_CLEAR(p->graph_files);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6pytact_11data_reader_LowlevelDataReader(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *p = (struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)o;
  if (p->graphs) {
    e = (*v)(p->graphs, a); if (e) return e;
  }
  if (p->graphid_by_filename) {
    e = (*v)(p->graphid_by_filename, a); if (e) return e;
  }
  if (p->graph_files) {
    e = (*v)(p->graph_files, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6pytact_11data_reader_LowlevelDataReader(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *p = (struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *)o;
  tmp = ((PyObject*)p->graphs);
  p->graphs = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->graphid_by_filename);
  p->graphid_by_filename = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->graph_files);
  p->graph_files = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_LowlevelDataReader(PyObject *o, Py_ssize_t i) {
  PyObject *r;
  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
  Py_DECREF(x);
  return r;
}

static PyObject *__pyx_getprop_6pytact_11data_reader_18LowlevelDataReader_graphid_by_filename(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_19graphid_by_filename_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_18LowlevelDataReader_graph_files(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_11graph_files_1__get__(o);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_LowlevelDataReader[] = {
  {"local_to_global", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_3local_to_global, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_18LowlevelDataReader_2local_to_global},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_9__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_11__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_LowlevelDataReader[] = {
  {(char *)"graphid_by_filename", __pyx_getprop_6pytact_11data_reader_18LowlevelDataReader_graphid_by_filename, 0, (char *)PyDoc_STR("Map from filenames in the data directory to their graph-id's."), 0},
  {(char *)"graph_files", __pyx_getprop_6pytact_11data_reader_18LowlevelDataReader_graph_files, 0, (char *)PyDoc_STR("Map's a graph-id to a filename. Inverse of `graphid_by_filename`."), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_LowlevelDataReader_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_LowlevelDataReader},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_7__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_LowlevelDataReader},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_7__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_18LowlevelDataReader_5__getitem__},
  {Py_tp_doc, (void *)PyDoc_STR("A thin wrapper around the raw Cap'n Proto structures contained in a dataset directory.\n\n    Every file in the directory is assigned an integer called a graph-id. This class is a\n    `Sequence` that allows the retrieval of the structures in a file by its graph-id.\n    Additionally, the function `local_to_global` translates a dependency-index relative to\n    a graph-id to a new graph-id. This allows one to find out in which file a node in a\n    graph is located.\n\n    This is a lowlevel interface. For details on using the exposed structures the documentation\n    in the Cap'n Proto API file.\n    ")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader_LowlevelDataReader},
  {Py_tp_clear, (void *)__pyx_tp_clear_6pytact_11data_reader_LowlevelDataReader},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_LowlevelDataReader},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_LowlevelDataReader},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_LowlevelDataReader},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_LowlevelDataReader_spec = {
  "pytact.data_reader.LowlevelDataReader",
  sizeof(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader_LowlevelDataReader_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_LowlevelDataReader = {
  __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_7__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_LowlevelDataReader, /*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_LowlevelDataReader = {
  __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_7__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_18LowlevelDataReader_5__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_LowlevelDataReader = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""LowlevelDataReader", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_LowlevelDataReader, /*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_LowlevelDataReader, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_LowlevelDataReader, /*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*/
  PyDoc_STR("A thin wrapper around the raw Cap'n Proto structures contained in a dataset directory.\n\n    Every file in the directory is assigned an integer called a graph-id. This class is a\n    `Sequence` that allows the retrieval of the structures in a file by its graph-id.\n    Additionally, the function `local_to_global` translates a dependency-index relative to\n    a graph-id to a new graph-id. This allows one to find out in which file a node in a\n    graph is located.\n\n    This is a lowlevel interface. For details on using the exposed structures the documentation\n    in the Cap'n Proto API file.\n    "), /*tp_doc*/
  __pyx_tp_traverse_6pytact_11data_reader_LowlevelDataReader, /*tp_traverse*/
  __pyx_tp_clear_6pytact_11data_reader_LowlevelDataReader, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_LowlevelDataReader, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_LowlevelDataReader, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_LowlevelDataReader, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Node __pyx_vtable_6pytact_11data_reader_Node;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Node(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Node *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Node *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Node;
  new((void*)&(p->node)) Graph::Node::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Node(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Node *p = (struct __pyx_obj_6pytact_11data_reader_Node *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Node) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->node);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_tp_richcompare_6pytact_11data_reader_Node(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_6pytact_11data_reader_4Node_3__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_6pytact_11data_reader_4Node_3__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret);
        Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_6pytact_11data_reader_4Node_label(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_4Node_5label_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_4Node_identity(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_4Node_8identity_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_4Node_children(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_4Node_8children_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_4Node_definition(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_4Node_10definition_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_4Node_graph(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_4Node_5graph_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_4Node_nodeid(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_4Node_6nodeid_1__get__(o);
}

static PyObject *__pyx_specialmethod___pyx_pw_6pytact_11data_reader_4Node_1__repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  return __pyx_pw_6pytact_11data_reader_4Node_1__repr__(self);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_Node[] = {
  {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_pw_6pytact_11data_reader_4Node_1__repr__, METH_NOARGS|METH_COEXIST, 0},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_4Node_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_4Node_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_Node[] = {
  {(char *)"label", __pyx_getprop_6pytact_11data_reader_4Node_label, 0, (char *)PyDoc_STR("The label of the node, indicating it's function in the CIC graph."), 0},
  {(char *)"identity", __pyx_getprop_6pytact_11data_reader_4Node_identity, 0, (char *)PyDoc_STR("The identity of a node uniquely determines it. That is, one can consider any to nodes with the same\n        identity to be equal. The notion of equal we use is as follows:\n        1. Graph perspective: Two nodes have the same identity if and only if they are bisimilar.\n           In this notion, bisimilarity does take into consideration the label of the nodes, modulo some\n           equivalence class that is not fully specified here. One aspect of the equivalence class is that\n           for definition nodes their associated global context (accessed through `Definition.previous`) is\n           not taken into account.\n        2. Lambda calculus perspective: Two nodes have the same identity if their corresponding lambda terms\n           are alpha-equivalent. Note that two definitions with the same body are not considered\n           alpha-equivalent.\n\n        The identity of a node is used to perform partial graph-sharing. That is, two nodes with the same\n        identity are merged when the graph is generated. There are two reasons why two nodes with the same\n        semantic identity might have a different physical identity:\n        1. Nodes are only merged when the first node exists in the same graph as the second node, or exists\n           in a dependent graph. Hence, nodes originating from developments that do not depend on each other\n           are never merged. Full graph-sharing would require global analysis on a dataset, which any consumer\n           can optionally do as a post-processing step.\n        2. Two definition nodes with the same name and body have the same identity. But if they occur in\n           different global contexts, these nodes are physically different to ensure the integrity of their\n           global contexts.\n\n        Beware that the identity is currently a 64 bit field. For datasets that have graphs of size in the\n        order of billions of nodes there is a non-trivial chance of a collision. (We consider this acc""eptable\n        for machine learning purposes.)\n        "), 0},
  {(char *)"children", __pyx_getprop_6pytact_11data_reader_4Node_children, 0, (char *)PyDoc_STR("The children of a node, together with the labels of the edges towards the children.\n        Note that for efficiency purposes, the label is represented as an integer. The corresponding\n        enum of this integer is `graph_api_capnp.EdgeClassification`."), 0},
  {(char *)"definition", __pyx_getprop_6pytact_11data_reader_4Node_definition, 0, (char *)PyDoc_STR("Some nodes in the CIC graph represent definitions. Such nodes contain extra information about the\n        definition.\n        "), 0},
  {(char *)"graph", __pyx_getprop_6pytact_11data_reader_4Node_graph, 0, (char *)PyDoc_STR("The id of the graph in which this node occurs. For lowlevel use only."), 0},
  {(char *)"nodeid", __pyx_getprop_6pytact_11data_reader_4Node_nodeid, 0, (char *)PyDoc_STR("The local id of the node in the dataset. For lowlevel use only."), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Node_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Node},
  {Py_tp_repr, (void *)__pyx_pw_6pytact_11data_reader_4Node_1__repr__},
  {Py_tp_hash, (void *)__pyx_pw_6pytact_11data_reader_4Node_5__hash__},
  {Py_tp_doc, (void *)PyDoc_STR("A node in the calculus of inductive construction graph.\n\n    A node has a `label`, a unique `identity` and `children`. Some nodes are also\n    a `Definition`.\n    ")},
  {Py_tp_richcompare, (void *)__pyx_tp_richcompare_6pytact_11data_reader_Node},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Node},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_Node},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Node},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Node_spec = {
  "pytact.data_reader.Node",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Node),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_Node_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader_Node = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Node", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Node), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Node, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  __pyx_pw_6pytact_11data_reader_4Node_1__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  __pyx_pw_6pytact_11data_reader_4Node_5__hash__, /*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*/
  PyDoc_STR("A node in the calculus of inductive construction graph.\n\n    A node has a `label`, a unique `identity` and `children`. Some nodes are also\n    a `Definition`.\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_tp_richcompare_6pytact_11data_reader_Node, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_Node, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_Node, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Node, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_EdgeTarget_List __pyx_vtable_6pytact_11data_reader_EdgeTarget_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_EdgeTarget_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_EdgeTarget_List;
  new((void*)&(p->edges))  ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_EdgeTarget_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *p = (struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_EdgeTarget_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->edges);
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_EdgeTarget_List(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_6pytact_11data_reader_EdgeTarget_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_EdgeTarget_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_EdgeTarget_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_EdgeTarget_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_15EdgeTarget_List_1__getitem__},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_EdgeTarget_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_EdgeTarget_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_EdgeTarget_List_spec = {
  "pytact.data_reader.EdgeTarget_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_EdgeTarget_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_EdgeTarget_List = {
  __pyx_pw_6pytact_11data_reader_15EdgeTarget_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_EdgeTarget_List, /*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_EdgeTarget_List = {
  __pyx_pw_6pytact_11data_reader_15EdgeTarget_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_15EdgeTarget_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_EdgeTarget_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""EdgeTarget_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_EdgeTarget_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_EdgeTarget_List, /*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_EdgeTarget_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_EdgeTarget_List, /*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_6pytact_11data_reader_EdgeTarget_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_EdgeTarget_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Node_List __pyx_vtable_6pytact_11data_reader_Node_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Node_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Node_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Node_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Node_List;
  new((void*)&(p->reader))  ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Node_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Node_List *p = (struct __pyx_obj_6pytact_11data_reader_Node_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Node_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_Node_List(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_6pytact_11data_reader_Node_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9Node_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9Node_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Node_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Node_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_9Node_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_Node_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_9Node_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_9Node_List_1__getitem__},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Node_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Node_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Node_List_spec = {
  "pytact.data_reader.Node_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Node_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_Node_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_Node_List = {
  __pyx_pw_6pytact_11data_reader_9Node_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_Node_List, /*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_Node_List = {
  __pyx_pw_6pytact_11data_reader_9Node_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_9Node_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_Node_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Node_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Node_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Node_List, /*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_Node_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Node_List, /*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_6pytact_11data_reader_Node_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Node_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofState __pyx_vtable_6pytact_11data_reader_ProofState;

static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofState(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_ProofState *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_ProofState *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_ProofState;
  new((void*)&(p->reader)) ProofState::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_ProofState(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_ProofState *p = (struct __pyx_obj_6pytact_11data_reader_ProofState *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_ProofState) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_lowlevel(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_8lowlevel_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_root(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_4root_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_context(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_7context_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_context_names(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_13context_names_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_context_text(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_12context_text_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_conclusion_text(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_15conclusion_text_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_text(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_4text_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10ProofState_id(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_2id_1__get__(o);
}

static PyObject *__pyx_specialmethod___pyx_pw_6pytact_11data_reader_10ProofState_1__repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  return __pyx_pw_6pytact_11data_reader_10ProofState_1__repr__(self);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_ProofState[] = {
  {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_pw_6pytact_11data_reader_10ProofState_1__repr__, METH_NOARGS|METH_COEXIST, 0},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10ProofState_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10ProofState_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_ProofState[] = {
  {(char *)"lowlevel", __pyx_getprop_6pytact_11data_reader_10ProofState_lowlevel, 0, (char *)0, 0},
  {(char *)"root", __pyx_getprop_6pytact_11data_reader_10ProofState_root, 0, (char *)PyDoc_STR("The entry-point of the proof state, all nodes that are 'part of' the proof state are\n        reachable from here."), 0},
  {(char *)"context", __pyx_getprop_6pytact_11data_reader_10ProofState_context, 0, (char *)PyDoc_STR("The local context of the proof state, given as a tuple of their original name as they appeared in the\n        proof and the corresponding node.\n\n        The nodes always have either label `contextAssum` or `contextDef`.\n        Note that these nodes are also reachable from the root of the proof state.\n\n        The names of the context elements should be used for debugging and viewing purposes only, because\n        hypothesis-generating tactics have been modified to use auto-generated names. Hence, tactics should\n        not be concerned about the names of the context.\n        "), 0},
  {(char *)"context_names", __pyx_getprop_6pytact_11data_reader_10ProofState_context_names, 0, (char *)PyDoc_STR("The names of the local context nodes of the proof state, as they originally appeared in the proof.\n\n        These names should be used for debugging and viewing purposes only, because hypothesis-generating tactics have\n        been modified to use auto-generated names. Hence, tactics should not be concerned about the names of\n        the context.\n        "), 0},
  {(char *)"context_text", __pyx_getprop_6pytact_11data_reader_10ProofState_context_text, 0, (char *)PyDoc_STR("A textual representation of the type/definition of context nodes\n        "), 0},
  {(char *)"conclusion_text", __pyx_getprop_6pytact_11data_reader_10ProofState_conclusion_text, 0, (char *)PyDoc_STR("A textual representation of the conclusion of the proof state.\n        "), 0},
  {(char *)"text", __pyx_getprop_6pytact_11data_reader_10ProofState_text, 0, (char *)PyDoc_STR("A textual representation of the proof state."), 0},
  {(char *)"id", __pyx_getprop_6pytact_11data_reader_10ProofState_id, 0, (char *)PyDoc_STR("\n        A unique identifier of the proof state. Any two proof states in a tactical proof that have an equal id\n        can morally be regarded to be 'the same' proof state.\n        IMPORTANT: Two proof states with the same id may still have different contents. This is because proof states\n                   can contain existential variables (represented by the `evar` node) that can be filled as a\n                   side-effect by a tactic running on another proof state.\n        "), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_ProofState_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_ProofState},
  {Py_tp_repr, (void *)__pyx_pw_6pytact_11data_reader_10ProofState_1__repr__},
  {Py_tp_str, (void *)__pyx_pw_6pytact_11data_reader_10ProofState_3__str__},
  {Py_tp_doc, (void *)PyDoc_STR("A proof state represents a particular point in the tactical proof of a constant.")},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_ProofState},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_ProofState},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_ProofState},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_ProofState_spec = {
  "pytact.data_reader.ProofState",
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofState),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_ProofState_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader_ProofState = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""ProofState", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofState), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_ProofState, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  __pyx_pw_6pytact_11data_reader_10ProofState_1__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  __pyx_pw_6pytact_11data_reader_10ProofState_3__str__, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  PyDoc_STR("A proof state represents a particular point in the tactical proof of a constant."), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_ProofState, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_ProofState, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_ProofState, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofState_List __pyx_vtable_6pytact_11data_reader_ProofState_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofState_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_ProofState_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_ProofState_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_ProofState_List;
  new((void*)&(p->reader))  ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_ProofState_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_ProofState_List *p = (struct __pyx_obj_6pytact_11data_reader_ProofState_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_ProofState_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_ProofState_List(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_6pytact_11data_reader_ProofState_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15ProofState_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_15ProofState_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_ProofState_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_ProofState_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_15ProofState_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_ProofState_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_15ProofState_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_15ProofState_List_1__getitem__},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_ProofState_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_ProofState_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_ProofState_List_spec = {
  "pytact.data_reader.ProofState_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofState_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_ProofState_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_ProofState_List = {
  __pyx_pw_6pytact_11data_reader_15ProofState_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_ProofState_List, /*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_ProofState_List = {
  __pyx_pw_6pytact_11data_reader_15ProofState_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_15ProofState_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_ProofState_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""ProofState_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofState_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_ProofState_List, /*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_ProofState_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ProofState_List, /*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_6pytact_11data_reader_ProofState_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_ProofState_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Argument_List __pyx_vtable_6pytact_11data_reader_Argument_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Argument_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Argument_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Argument_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Argument_List;
  new((void*)&(p->reader))  ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Argument_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Argument_List *p = (struct __pyx_obj_6pytact_11data_reader_Argument_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Argument_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_Argument_List(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_6pytact_11data_reader_Argument_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_13Argument_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_13Argument_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Argument_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Argument_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_13Argument_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_Argument_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_13Argument_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_13Argument_List_1__getitem__},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Argument_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Argument_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Argument_List_spec = {
  "pytact.data_reader.Argument_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Argument_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_Argument_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_Argument_List = {
  __pyx_pw_6pytact_11data_reader_13Argument_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_Argument_List, /*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_Argument_List = {
  __pyx_pw_6pytact_11data_reader_13Argument_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_13Argument_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_Argument_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Argument_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Argument_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Argument_List, /*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_Argument_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Argument_List, /*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_6pytact_11data_reader_Argument_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Argument_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Outcome __pyx_vtable_6pytact_11data_reader_Outcome;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Outcome(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Outcome *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Outcome *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Outcome;
  new((void*)&(p->reader)) Outcome::Reader();
  p->tactic = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Outcome(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Outcome *p = (struct __pyx_obj_6pytact_11data_reader_Outcome *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !_PyGC_FINALIZED(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Outcome) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->reader);
  Py_CLEAR(p->tactic);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6pytact_11data_reader_Outcome(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader_Outcome *p = (struct __pyx_obj_6pytact_11data_reader_Outcome *)o;
  if (p->tactic) {
    e = (*v)(p->tactic, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6pytact_11data_reader_Outcome(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6pytact_11data_reader_Outcome *p = (struct __pyx_obj_6pytact_11data_reader_Outcome *)o;
  tmp = ((PyObject*)p->tactic);
  p->tactic = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Outcome_lowlevel(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_8lowlevel_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Outcome_before(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_6before_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Outcome_after(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_5after_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Outcome_term(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_4term_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Outcome_term_text(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_9term_text_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Outcome_tactic_arguments(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_16tactic_arguments_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Outcome_tactic(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_6tactic_1__get__(o);
}

static PyObject *__pyx_specialmethod___pyx_pw_6pytact_11data_reader_7Outcome_1__repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  return __pyx_pw_6pytact_11data_reader_7Outcome_1__repr__(self);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_Outcome[] = {
  {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_pw_6pytact_11data_reader_7Outcome_1__repr__, METH_NOARGS|METH_COEXIST, 0},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Outcome_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Outcome_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_Outcome[] = {
  {(char *)"lowlevel", __pyx_getprop_6pytact_11data_reader_7Outcome_lowlevel, 0, (char *)0, 0},
  {(char *)"before", __pyx_getprop_6pytact_11data_reader_7Outcome_before, 0, (char *)PyDoc_STR("The proof state before the tactic execution."), 0},
  {(char *)"after", __pyx_getprop_6pytact_11data_reader_7Outcome_after, 0, (char *)PyDoc_STR("The new proof states that were generated by the tactic."), 0},
  {(char *)"term", __pyx_getprop_6pytact_11data_reader_7Outcome_term, 0, (char *)PyDoc_STR("The proof term that witnesses the transition from the before state to the after states. It contains a\n        hole (an `evar` node) for each of the after states. It may also refer to elements of the local context of\n        the before state.\n        "), 0},
  {(char *)"term_text", __pyx_getprop_6pytact_11data_reader_7Outcome_term_text, 0, (char *)PyDoc_STR("A textual representation of the proof term."), 0},
  {(char *)"tactic_arguments", __pyx_getprop_6pytact_11data_reader_7Outcome_tactic_arguments, 0, (char *)PyDoc_STR("The arguments of the tactic that produced this outcome.\n\n        The node is the root of a graph representing an argument that is a term in the calculus of constructions.\n        Sometimes, an argument is not resolvable to a term, in which case it is marked as `Unresolvable`.\n        "), 0},
  {(char *)"tactic", __pyx_getprop_6pytact_11data_reader_7Outcome_tactic, 0, (char *)PyDoc_STR("The tactic that generated the outcome. For it's arguments, see `tactic_arguments`\n\n    Sometimes a tactic cannot or should not be recorded. In those cases, it is marked as 'unknown'.\n    This currently happens with tactics that are run as a result of the `Proof with tac` construct and it\n    happens for tactics that are known to be unsafe like `change_no_check`, `fix`, `cofix` and more.\n    "), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Outcome_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Outcome},
  {Py_tp_repr, (void *)__pyx_pw_6pytact_11data_reader_7Outcome_1__repr__},
  {Py_tp_doc, (void *)PyDoc_STR("An outcome is the result of running a tactic on a proof state. A tactic may run on multiple proof states.")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader_Outcome},
  {Py_tp_clear, (void *)__pyx_tp_clear_6pytact_11data_reader_Outcome},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Outcome},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_Outcome},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Outcome},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Outcome_spec = {
  "pytact.data_reader.Outcome",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Outcome),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader_Outcome_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader_Outcome = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Outcome", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Outcome), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Outcome, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  __pyx_pw_6pytact_11data_reader_7Outcome_1__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("An outcome is the result of running a tactic on a proof state. A tactic may run on multiple proof states."), /*tp_doc*/
  __pyx_tp_traverse_6pytact_11data_reader_Outcome, /*tp_traverse*/
  __pyx_tp_clear_6pytact_11data_reader_Outcome, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_Outcome, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_Outcome, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Outcome, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Outcome_List __pyx_vtable_6pytact_11data_reader_Outcome_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Outcome_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Outcome_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Outcome_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Outcome_List;
  new((void*)&(p->reader))  ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader();
  p->tactic = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Outcome_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Outcome_List *p = (struct __pyx_obj_6pytact_11data_reader_Outcome_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !_PyGC_FINALIZED(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Outcome_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->reader);
  Py_CLEAR(p->tactic);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6pytact_11data_reader_Outcome_List(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader_Outcome_List *p = (struct __pyx_obj_6pytact_11data_reader_Outcome_List *)o;
  if (p->tactic) {
    e = (*v)(p->tactic, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6pytact_11data_reader_Outcome_List(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6pytact_11data_reader_Outcome_List *p = (struct __pyx_obj_6pytact_11data_reader_Outcome_List *)o;
  tmp = ((PyObject*)p->tactic);
  p->tactic = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_Outcome_List(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_6pytact_11data_reader_Outcome_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_12Outcome_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_12Outcome_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Outcome_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Outcome_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_12Outcome_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_Outcome_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_12Outcome_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_12Outcome_List_1__getitem__},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader_Outcome_List},
  {Py_tp_clear, (void *)__pyx_tp_clear_6pytact_11data_reader_Outcome_List},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Outcome_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Outcome_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Outcome_List_spec = {
  "pytact.data_reader.Outcome_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Outcome_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader_Outcome_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_Outcome_List = {
  __pyx_pw_6pytact_11data_reader_12Outcome_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_Outcome_List, /*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_Outcome_List = {
  __pyx_pw_6pytact_11data_reader_12Outcome_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_12Outcome_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_Outcome_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Outcome_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Outcome_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Outcome_List, /*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_Outcome_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Outcome_List, /*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_6pytact_11data_reader_Outcome_List, /*tp_traverse*/
  __pyx_tp_clear_6pytact_11data_reader_Outcome_List, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_Outcome_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Outcome_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep __pyx_vtable_6pytact_11data_reader_ProofStep;

static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofStep(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_ProofStep *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_ProofStep *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_ProofStep;
  new((void*)&(p->reader)) ProofStep::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_ProofStep(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_ProofStep *p = (struct __pyx_obj_6pytact_11data_reader_ProofStep *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_ProofStep) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_9ProofStep_lowlevel(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_9ProofStep_8lowlevel_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_9ProofStep_tactic(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_9ProofStep_6tactic_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_9ProofStep_outcomes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_9ProofStep_8outcomes_1__get__(o);
}

static PyObject *__pyx_specialmethod___pyx_pw_6pytact_11data_reader_9ProofStep_1__repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  return __pyx_pw_6pytact_11data_reader_9ProofStep_1__repr__(self);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_ProofStep[] = {
  {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_pw_6pytact_11data_reader_9ProofStep_1__repr__, METH_NOARGS|METH_COEXIST, 0},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9ProofStep_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_9ProofStep_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_ProofStep[] = {
  {(char *)"lowlevel", __pyx_getprop_6pytact_11data_reader_9ProofStep_lowlevel, 0, (char *)0, 0},
  {(char *)"tactic", __pyx_getprop_6pytact_11data_reader_9ProofStep_tactic, 0, (char *)PyDoc_STR("The tactic that generated the proof step. Note that the arguments of the tactic can be found in the\n        individual outcomes, because they may be different for each outcome.\n\n        Sometimes a tactic cannot or should not be recorded. In those cases, it is marked as 'unknown'.\n        This currently happens with tactics that are run as a result of the `Proof with tac` construct and it\n        happens for tactics that are known to be unsafe like `change_no_check`, `fix`, `cofix` and more.\n        "), 0},
  {(char *)"outcomes", __pyx_getprop_6pytact_11data_reader_9ProofStep_outcomes, 0, (char *)PyDoc_STR("A list of transformations of proof states to other proof states, as executed by the tactic of the proof\n        step\n        "), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_ProofStep_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_ProofStep},
  {Py_tp_repr, (void *)__pyx_pw_6pytact_11data_reader_9ProofStep_1__repr__},
  {Py_tp_doc, (void *)PyDoc_STR("A proof step is the execution of a single tactic on one or more proof states, producing a list of outcomes.\n    ")},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_ProofStep},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_ProofStep},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_ProofStep},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_ProofStep_spec = {
  "pytact.data_reader.ProofStep",
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofStep),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_ProofStep_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader_ProofStep = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""ProofStep", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofStep), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_ProofStep, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  __pyx_pw_6pytact_11data_reader_9ProofStep_1__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  PyDoc_STR("A proof step is the execution of a single tactic on one or more proof states, producing a list of outcomes.\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_ProofStep, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_ProofStep, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_ProofStep, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_ProofStep_List __pyx_vtable_6pytact_11data_reader_ProofStep_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_ProofStep_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_ProofStep_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_ProofStep_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_ProofStep_List;
  new((void*)&(p->reader))  ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_ProofStep_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_ProofStep_List *p = (struct __pyx_obj_6pytact_11data_reader_ProofStep_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_ProofStep_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_ProofStep_List(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_6pytact_11data_reader_ProofStep_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_14ProofStep_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_14ProofStep_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_ProofStep_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_ProofStep_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_14ProofStep_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_ProofStep_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_14ProofStep_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_14ProofStep_List_1__getitem__},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_ProofStep_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_ProofStep_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_ProofStep_List_spec = {
  "pytact.data_reader.ProofStep_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofStep_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_ProofStep_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_ProofStep_List = {
  __pyx_pw_6pytact_11data_reader_14ProofStep_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_ProofStep_List, /*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_ProofStep_List = {
  __pyx_pw_6pytact_11data_reader_14ProofStep_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_14ProofStep_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_ProofStep_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""ProofStep_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_ProofStep_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_ProofStep_List, /*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_ProofStep_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_ProofStep_List, /*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_6pytact_11data_reader_ProofStep_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_ProofStep_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Representative_List __pyx_vtable_6pytact_11data_reader_Representative_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Representative_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Representative_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Representative_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Representative_List;
  new((void*)&(p->reader))  ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Representative_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Representative_List *p = (struct __pyx_obj_6pytact_11data_reader_Representative_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Representative_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_Representative_List(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_6pytact_11data_reader_Representative_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_19Representative_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_19Representative_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Representative_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Representative_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_19Representative_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_Representative_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_19Representative_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_19Representative_List_1__getitem__},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Representative_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Representative_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Representative_List_spec = {
  "pytact.data_reader.Representative_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Representative_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_Representative_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_Representative_List = {
  __pyx_pw_6pytact_11data_reader_19Representative_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_Representative_List, /*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_Representative_List = {
  __pyx_pw_6pytact_11data_reader_19Representative_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_19Representative_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_Representative_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Representative_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Representative_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Representative_List, /*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_Representative_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Representative_List, /*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_6pytact_11data_reader_Representative_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Representative_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Definition __pyx_vtable_6pytact_11data_reader_Definition;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Definition(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Definition *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Definition *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Definition;
  new((void*)&(p->reader)) Definition::Reader();
  p->node = ((struct __pyx_obj_6pytact_11data_reader_Node *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Definition(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Definition *p = (struct __pyx_obj_6pytact_11data_reader_Definition *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !_PyGC_FINALIZED(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Definition) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->reader);
  Py_CLEAR(p->node);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6pytact_11data_reader_Definition(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader_Definition *p = (struct __pyx_obj_6pytact_11data_reader_Definition *)o;
  if (p->node) {
    e = (*v)(((PyObject *)p->node), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6pytact_11data_reader_Definition(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6pytact_11data_reader_Definition *p = (struct __pyx_obj_6pytact_11data_reader_Definition *)o;
  tmp = ((PyObject*)p->node);
  p->node = ((struct __pyx_obj_6pytact_11data_reader_Node *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_tp_richcompare_6pytact_11data_reader_Definition(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_6pytact_11data_reader_10Definition_3__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_6pytact_11data_reader_10Definition_3__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret);
        Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_lowlevel(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_8lowlevel_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_4name_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_previous(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_8previous_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_external_previous(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_17external_previous_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_status(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_6status_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_kind(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_4kind_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_proof(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_5proof_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_cluster_representative(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_22cluster_representative_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_cluster(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_7cluster_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_type_text(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_9type_text_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_term_text(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_9term_text_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_is_file_representative(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_22is_file_representative_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_10Definition_node(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_10Definition_4node_1__get__(o);
}

static PyObject *__pyx_specialmethod___pyx_pw_6pytact_11data_reader_10Definition_1__repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  return __pyx_pw_6pytact_11data_reader_10Definition_1__repr__(self);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_Definition[] = {
  {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_pw_6pytact_11data_reader_10Definition_1__repr__, METH_NOARGS|METH_COEXIST, 0},
  {"_global_context", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_7_global_context, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"global_context", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_10global_context, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_10Definition_9global_context},
  {"clustered_global_context", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_12clustered_global_context, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_10Definition_11clustered_global_context},
  {"_group_by_clusters", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_14_group_by_clusters, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_17__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_10Definition_19__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_Definition[] = {
  {(char *)"lowlevel", __pyx_getprop_6pytact_11data_reader_10Definition_lowlevel, 0, (char *)0, 0},
  {(char *)"name", __pyx_getprop_6pytact_11data_reader_10Definition_name, 0, (char *)PyDoc_STR("The fully-qualified name of the definition. The name should be unique in a particular global context,\n        but is not unique among different branches of the global in a dataset.\n        "), 0},
  {(char *)"previous", __pyx_getprop_6pytact_11data_reader_10Definition_previous, 0, (char *)PyDoc_STR("The previous definition within the global context of the current file.\n\n        Note that this is a lowlevel property. Prefer to use `global_context` or `clustered_global_context`.\n\n        The contract on this field is that any definition nodes reachable from the forward closure of the definition\n        must also be reachable through the chain of previous fields. An exception to this rule are mutually\n        recursive definitions. Those nodes are placed into the global context in an arbitrary ordering.\n        "), 0},
  {(char *)"external_previous", __pyx_getprop_6pytact_11data_reader_10Definition_external_previous, 0, (char *)PyDoc_STR("A list of definitions that are the representatives of files other than the current file that are\n        part of the global context. This list becomes populated when a `Require` statement occurred right before\n        the definition.\n\n        Note that this is a lowlevel property. Prefer to use `global_context` or `clustered_global_context`.\n        "), 0},
  {(char *)"status", __pyx_getprop_6pytact_11data_reader_10Definition_status, 0, (char *)PyDoc_STR("A definition is either\n        (1) an object as originally inputted by the user.\n        (2) a definition that was originally defined in a section and has now had the section\n            variables discharged into it.\n        (3) a definition that was obtained by performing some sort of module functor substitution.\n        When a definition is not original, we cross-reference to the definition that it was derived from.\n        "), 0},
  {(char *)"kind", __pyx_getprop_6pytact_11data_reader_10Definition_kind, 0, (char *)PyDoc_STR("The kind of the definition.\n\n        It can be an constant, section constant, inductive, constructor or projection. In case of a constant\n        of a constant or section constant, an optional tactical proof can be associated. In case of an inductive,\n        constructor or projection, another definition that acts as the representative of the mutually recursive\n        cluster of definitions is associated.\n\n        The associated information is low-level. Prefer to use the properties `proof` and `cluster` to access them.\n        "), 0},
  {(char *)"proof", __pyx_getprop_6pytact_11data_reader_10Definition_proof, 0, (char *)PyDoc_STR("An optional tactical proof that was used to create this definition."), 0},
  {(char *)"cluster_representative", __pyx_getprop_6pytact_11data_reader_10Definition_cluster_representative, 0, (char *)PyDoc_STR("A unique representative of the mutually recursive cluster of definitions this definition is part of.\n        If the definition is not mutually recursive, the representative is itself.\n\n        This is a low-level property. Prefer to use the `cluster` property.\n        "), 0},
  {(char *)"cluster", __pyx_getprop_6pytact_11data_reader_10Definition_cluster, 0, (char *)PyDoc_STR("The cluster of mutually recursive definitions that this definition is part of.\n        If the definition is not mutually recursive, the cluster is a singleton."), 0},
  {(char *)"type_text", __pyx_getprop_6pytact_11data_reader_10Definition_type_text, 0, (char *)PyDoc_STR("A textual representation of the type of this definition."), 0},
  {(char *)"term_text", __pyx_getprop_6pytact_11data_reader_10Definition_term_text, 0, (char *)PyDoc_STR("A textual representation of the body of this definition.\n        For inductives, constructors, projections, section variables and axioms this is `None`.\n        "), 0},
  {(char *)"is_file_representative", __pyx_getprop_6pytact_11data_reader_10Definition_is_file_representative, 0, (char *)PyDoc_STR("Returns true if this definition is the representative of the super-global context of it's file.\n        Se also `Dataset.representative`."), 0},
  {(char *)"node", __pyx_getprop_6pytact_11data_reader_10Definition_node, 0, (char *)PyDoc_STR("The node that is associated with this definition. It holds that `definition.node.definition == definition`.\n    "), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Definition_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Definition},
  {Py_tp_repr, (void *)__pyx_pw_6pytact_11data_reader_10Definition_1__repr__},
  {Py_tp_hash, (void *)__pyx_pw_6pytact_11data_reader_10Definition_5__hash__},
  {Py_tp_doc, (void *)PyDoc_STR("A definition of the CIC, which is either a constant, inductive, constructor, projection or section\n    variable. Constants and section variables can have tactical proofs associated to them.\n    ")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader_Definition},
  {Py_tp_clear, (void *)__pyx_tp_clear_6pytact_11data_reader_Definition},
  {Py_tp_richcompare, (void *)__pyx_tp_richcompare_6pytact_11data_reader_Definition},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Definition},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_Definition},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Definition},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Definition_spec = {
  "pytact.data_reader.Definition",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Definition),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader_Definition_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader_Definition = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Definition", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Definition), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Definition, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  __pyx_pw_6pytact_11data_reader_10Definition_1__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  __pyx_pw_6pytact_11data_reader_10Definition_5__hash__, /*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*/
  PyDoc_STR("A definition of the CIC, which is either a constant, inductive, constructor, projection or section\n    variable. Constants and section variables can have tactical proofs associated to them.\n    "), /*tp_doc*/
  __pyx_tp_traverse_6pytact_11data_reader_Definition, /*tp_traverse*/
  __pyx_tp_clear_6pytact_11data_reader_Definition, /*tp_clear*/
  __pyx_tp_richcompare_6pytact_11data_reader_Definition, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_Definition, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_Definition, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Definition, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Dataset_Definition_List __pyx_vtable_6pytact_11data_reader_Dataset_Definition_List;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Dataset_Definition_List(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Dataset_Definition_List;
  new((void*)&(p->reader))  ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Dataset_Definition_List(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *p = (struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Dataset_Definition_List) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->reader);
  (*Py_TYPE(o)->tp_free)(o);
}
static PyObject *__pyx_sq_item_6pytact_11data_reader_Dataset_Definition_List(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_6pytact_11data_reader_Dataset_Definition_List[] = {
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Dataset_Definition_List_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Dataset_Definition_List},
  {Py_sq_length, (void *)__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_3__len__},
  {Py_sq_item, (void *)__pyx_sq_item_6pytact_11data_reader_Dataset_Definition_List},
  {Py_mp_length, (void *)__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_3__len__},
  {Py_mp_subscript, (void *)__pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_1__getitem__},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Dataset_Definition_List},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Dataset_Definition_List},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Dataset_Definition_List_spec = {
  "pytact.data_reader.Dataset_Definition_List",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_Dataset_Definition_List_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_Dataset_Definition_List = {
  __pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_3__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_6pytact_11data_reader_Dataset_Definition_List, /*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_Dataset_Definition_List = {
  __pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_3__len__, /*mp_length*/
  __pyx_pw_6pytact_11data_reader_23Dataset_Definition_List_1__getitem__, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_6pytact_11data_reader_Dataset_Definition_List = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Dataset_Definition_List", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Dataset_Definition_List), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_Dataset_Definition_List, /*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_Dataset_Definition_List, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Dataset_Definition_List, /*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_6pytact_11data_reader_Dataset_Definition_List, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_Dataset_Definition_List, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_Dataset __pyx_vtable_6pytact_11data_reader_Dataset;

static PyObject *__pyx_tp_new_6pytact_11data_reader_Dataset(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_Dataset *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_Dataset *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_Dataset;
  new((void*)&(p->reader)) Dataset::Reader();
  p->filename = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_Dataset(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_Dataset *p = (struct __pyx_obj_6pytact_11data_reader_Dataset *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !_PyGC_FINALIZED(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_Dataset) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->reader);
  Py_CLEAR(p->filename);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_6pytact_11data_reader_Dataset(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader_Dataset *p = (struct __pyx_obj_6pytact_11data_reader_Dataset *)o;
  if (p->filename) {
    e = (*v)(p->filename, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_6pytact_11data_reader_Dataset(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_6pytact_11data_reader_Dataset *p = (struct __pyx_obj_6pytact_11data_reader_Dataset *)o;
  tmp = ((PyObject*)p->filename);
  p->filename = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Dataset_lowlevel(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Dataset_8lowlevel_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Dataset_dependencies(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Dataset_12dependencies_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Dataset_representative(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Dataset_14representative_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Dataset_module_name(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Dataset_11module_name_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Dataset_graph(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Dataset_5graph_1__get__(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_7Dataset_filename(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_7Dataset_8filename_1__get__(o);
}

static PyObject *__pyx_specialmethod___pyx_pw_6pytact_11data_reader_7Dataset_1__repr__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  return __pyx_pw_6pytact_11data_reader_7Dataset_1__repr__(self);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_Dataset[] = {
  {"__repr__", (PyCFunction)__pyx_specialmethod___pyx_pw_6pytact_11data_reader_7Dataset_1__repr__, METH_NOARGS|METH_COEXIST, 0},
  {"definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_3definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_7Dataset_2definitions},
  {"clustered_definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_5clustered_definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_7Dataset_4clustered_definitions},
  {"node_by_id", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_7node_by_id, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_7Dataset_6node_by_id},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_9__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_7Dataset_11__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_Dataset[] = {
  {(char *)"lowlevel", __pyx_getprop_6pytact_11data_reader_7Dataset_lowlevel, 0, (char *)0, 0},
  {(char *)"dependencies", __pyx_getprop_6pytact_11data_reader_7Dataset_dependencies, 0, (char *)PyDoc_STR("A list of physical paths of data files that are direct dependencies of this file.\n\n        It is guaranteed that no cycles exist in the dependency relation between files induced by this field.\n        "), 0},
  {(char *)"representative", __pyx_getprop_6pytact_11data_reader_7Dataset_representative, 0, (char *)PyDoc_STR("The entry point of the global context of definitions that are available when this file is 'Required' by\n        another file. The full global context can be obtained by following the `previous` node of definitions.\n        If the compilation unit does not contain any 'super'-global definitions this may be `None`.\n\n        This is a low-level property.\n        Prefer to use `definitions(spine_only = True)` and `clustered_definitions(spine_only=True)`.\n        "), 0},
  {(char *)"module_name", __pyx_getprop_6pytact_11data_reader_7Dataset_module_name, 0, (char *)0, 0},
  {(char *)"graph", __pyx_getprop_6pytact_11data_reader_7Dataset_graph, 0, (char *)0, 0},
  {(char *)"filename", __pyx_getprop_6pytact_11data_reader_7Dataset_filename, 0, (char *)PyDoc_STR("The physical file in which the data contained in this class can be found."), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_Dataset_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_Dataset},
  {Py_tp_repr, (void *)__pyx_pw_6pytact_11data_reader_7Dataset_1__repr__},
  {Py_tp_doc, (void *)PyDoc_STR("The data corresponding to a single Coq source file. The data contains a representation of all definitions\n    that have existed at any point throughout the compilation of the source file.\n    ")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader_Dataset},
  {Py_tp_clear, (void *)__pyx_tp_clear_6pytact_11data_reader_Dataset},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_Dataset},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_Dataset},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_Dataset},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_Dataset_spec = {
  "pytact.data_reader.Dataset",
  sizeof(struct __pyx_obj_6pytact_11data_reader_Dataset),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader_Dataset_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader_Dataset = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""Dataset", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_Dataset), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_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
  __pyx_pw_6pytact_11data_reader_7Dataset_1__repr__, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  PyDoc_STR("The data corresponding to a single Coq source file. The data contains a representation of all definitions\n    that have existed at any point throughout the compilation of the source file.\n    "), /*tp_doc*/
  __pyx_tp_traverse_6pytact_11data_reader_Dataset, /*tp_traverse*/
  __pyx_tp_clear_6pytact_11data_reader_Dataset, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_6pytact_11data_reader_Dataset, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_Dataset, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_6pytact_11data_reader_OnlineDefinitionsReader __pyx_vtable_6pytact_11data_reader_OnlineDefinitionsReader;

static PyObject *__pyx_tp_new_6pytact_11data_reader_OnlineDefinitionsReader(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)o);
  p->__pyx_vtab = __pyx_vtabptr_6pytact_11data_reader_OnlineDefinitionsReader;
  new((void*)&(p->graph_index)) struct __pyx_t_6pytact_11data_reader_GraphIndex();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader_OnlineDefinitionsReader(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *p = (struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_6pytact_11data_reader_OnlineDefinitionsReader) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->graph_index);
  (*Py_TYPE(o)->tp_free)(o);
}

static PyObject *__pyx_getprop_6pytact_11data_reader_23OnlineDefinitionsReader_representative(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_14representative_1__get__(o);
}

static PyMethodDef __pyx_methods_6pytact_11data_reader_OnlineDefinitionsReader[] = {
  {"local_to_global", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_1local_to_global, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_3definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_23OnlineDefinitionsReader_2definitions},
  {"clustered_definitions", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_5clustered_definitions, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_6pytact_11data_reader_23OnlineDefinitionsReader_4clustered_definitions},
  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_6pytact_11data_reader_23OnlineDefinitionsReader_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_6pytact_11data_reader_OnlineDefinitionsReader[] = {
  {(char *)"representative", __pyx_getprop_6pytact_11data_reader_23OnlineDefinitionsReader_representative, 0, (char *)PyDoc_STR("The last definition in the global context. All other definitions can be accessed by following\n        the `Definition.previous` chain starting from this definitions.\n\n        This is a low-level property.\n        Prefer to use `definitions` and `clustered_definitions`.\n        "), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader_OnlineDefinitionsReader_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader_OnlineDefinitionsReader},
  {Py_tp_methods, (void *)__pyx_methods_6pytact_11data_reader_OnlineDefinitionsReader},
  {Py_tp_getset, (void *)__pyx_getsets_6pytact_11data_reader_OnlineDefinitionsReader},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader_OnlineDefinitionsReader},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader_OnlineDefinitionsReader_spec = {
  "pytact.data_reader.OnlineDefinitionsReader",
  sizeof(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_6pytact_11data_reader_OnlineDefinitionsReader_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader_OnlineDefinitionsReader = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""OnlineDefinitionsReader", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader_OnlineDefinitionsReader), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader_OnlineDefinitionsReader, /*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_6pytact_11data_reader_OnlineDefinitionsReader, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_6pytact_11data_reader_OnlineDefinitionsReader, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader_OnlineDefinitionsReader, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_create_mmap);
  Py_CLEAR(p->__pyx_v_fname);
  Py_CLEAR(p->__pyx_v_g);
  Py_CLEAR(p->__pyx_v_mm);
  Py_CLEAR(p->__pyx_v_mv);
  Py_CLEAR(p->__pyx_t_0);
  Py_CLEAR(p->__pyx_t_1);
  Py_CLEAR(p->__pyx_t_2);
  Py_CLEAR(p->__pyx_t_3);
  Py_CLEAR(p->__pyx_t_4);
  Py_CLEAR(p->__pyx_t_5);
  Py_CLEAR(p->__pyx_t_6);
  Py_CLEAR(p->__pyx_t_7);
  Py_CLEAR(p->__pyx_t_8);
  Py_CLEAR(p->__pyx_t_9);
  Py_CLEAR(p->__pyx_t_10);
  Py_CLEAR(p->__pyx_t_11);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader *)o;
  if (p->__pyx_v_create_mmap) {
    e = (*v)(p->__pyx_v_create_mmap, a); if (e) return e;
  }
  if (p->__pyx_v_fname) {
    e = (*v)(p->__pyx_v_fname, a); if (e) return e;
  }
  if (p->__pyx_v_g) {
    e = (*v)(p->__pyx_v_g, a); if (e) return e;
  }
  if (p->__pyx_v_mm) {
    e = (*v)(p->__pyx_v_mm, a); if (e) return e;
  }
  if (p->__pyx_v_mv) {
    e = (*v)(p->__pyx_v_mv, 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;
  }
  if (p->__pyx_t_2) {
    e = (*v)(p->__pyx_t_2, a); if (e) return e;
  }
  if (p->__pyx_t_3) {
    e = (*v)(p->__pyx_t_3, a); if (e) return e;
  }
  if (p->__pyx_t_4) {
    e = (*v)(p->__pyx_t_4, a); if (e) return e;
  }
  if (p->__pyx_t_5) {
    e = (*v)(p->__pyx_t_5, a); if (e) return e;
  }
  if (p->__pyx_t_6) {
    e = (*v)(p->__pyx_t_6, a); if (e) return e;
  }
  if (p->__pyx_t_7) {
    e = (*v)(p->__pyx_t_7, a); if (e) return e;
  }
  if (p->__pyx_t_8) {
    e = (*v)(p->__pyx_t_8, a); if (e) return e;
  }
  if (p->__pyx_t_9) {
    e = (*v)(p->__pyx_t_9, a); if (e) return e;
  }
  if (p->__pyx_t_10) {
    e = (*v)(p->__pyx_t_10, a); if (e) return e;
  }
  if (p->__pyx_t_11) {
    e = (*v)(p->__pyx_t_11, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader_spec = {
  "pytact.data_reader.__pyx_scope_struct__file_dataset_reader",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct__file_dataset_reader", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader, /*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_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_dataset);
  Py_CLEAR(p->__pyx_v_dataset_path);
  Py_CLEAR(p->__pyx_v_dr);
  Py_CLEAR(p->__pyx_8genexpr5__pyx_v_f);
  Py_CLEAR(p->__pyx_8genexpr6__pyx_v_fname);
  Py_CLEAR(p->__pyx_v_fnames);
  Py_CLEAR(p->__pyx_v_hard);
  Py_CLEAR(p->__pyx_v_mountpoint);
  Py_CLEAR(p->__pyx_v_new_soft);
  Py_CLEAR(p->__pyx_v_soft);
  Py_CLEAR(p->__pyx_v_stack);
  Py_CLEAR(p->__pyx_t_0);
  Py_CLEAR(p->__pyx_t_1);
  Py_CLEAR(p->__pyx_t_2);
  Py_CLEAR(p->__pyx_t_3);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader *)o;
  if (p->__pyx_v_dataset) {
    e = (*v)(p->__pyx_v_dataset, a); if (e) return e;
  }
  if (p->__pyx_v_dataset_path) {
    e = (*v)(p->__pyx_v_dataset_path, a); if (e) return e;
  }
  if (p->__pyx_v_dr) {
    e = (*v)(((PyObject *)p->__pyx_v_dr), a); if (e) return e;
  }
  if (p->__pyx_8genexpr5__pyx_v_f) {
    e = (*v)(p->__pyx_8genexpr5__pyx_v_f, a); if (e) return e;
  }
  if (p->__pyx_8genexpr6__pyx_v_fname) {
    e = (*v)(p->__pyx_8genexpr6__pyx_v_fname, a); if (e) return e;
  }
  if (p->__pyx_v_fnames) {
    e = (*v)(p->__pyx_v_fnames, a); if (e) return e;
  }
  if (p->__pyx_v_hard) {
    e = (*v)(p->__pyx_v_hard, a); if (e) return e;
  }
  if (p->__pyx_v_mountpoint) {
    e = (*v)(p->__pyx_v_mountpoint, a); if (e) return e;
  }
  if (p->__pyx_v_new_soft) {
    e = (*v)(p->__pyx_v_new_soft, a); if (e) return e;
  }
  if (p->__pyx_v_soft) {
    e = (*v)(p->__pyx_v_soft, a); if (e) return e;
  }
  if (p->__pyx_v_stack) {
    e = (*v)(p->__pyx_v_stack, 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;
  }
  if (p->__pyx_t_2) {
    e = (*v)(p->__pyx_t_2, a); if (e) return e;
  }
  if (p->__pyx_t_3) {
    e = (*v)(p->__pyx_t_3, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader_spec = {
  "pytact.data_reader.__pyx_scope_struct_1_lowlevel_data_reader",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_1_lowlevel_data_reader", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader, /*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_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_2__global_context[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_2__global_context = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_2__global_context(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_2__global_context > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_2__global_context[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_2__global_context];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_2__global_context(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_across_files);
  Py_CLEAR(p->__pyx_v_d);
  Py_CLEAR(p->__pyx_v_eprev);
  Py_CLEAR(p->__pyx_v_inclusive);
  Py_CLEAR(p->__pyx_v_seen);
  Py_CLEAR(p->__pyx_v_self);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_2__global_context < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_2__global_context[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_2__global_context++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_2__global_context(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context *)o;
  if (p->__pyx_v_across_files) {
    e = (*v)(p->__pyx_v_across_files, a); if (e) return e;
  }
  if (p->__pyx_v_d) {
    e = (*v)(p->__pyx_v_d, a); if (e) return e;
  }
  if (p->__pyx_v_eprev) {
    e = (*v)(p->__pyx_v_eprev, a); if (e) return e;
  }
  if (p->__pyx_v_inclusive) {
    e = (*v)(p->__pyx_v_inclusive, a); if (e) return e;
  }
  if (p->__pyx_v_seen) {
    e = (*v)(p->__pyx_v_seen, 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_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_2__global_context},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_2__global_context},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_2__global_context},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context_spec = {
  "pytact.data_reader.__pyx_scope_struct_2__global_context",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_2__global_context", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_2__global_context), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_2__global_context, /*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_6pytact_11data_reader___pyx_scope_struct_2__global_context, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_2__global_context, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_3___get__[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_3___get__ = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_3___get__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_3___get__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_3___get__[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_3___get__];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_3___get__(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_current);
  Py_CLEAR(p->__pyx_v_repr_node);
  Py_CLEAR(p->__pyx_v_representative);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_3___get__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_3___get__[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_3___get__++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_3___get__(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__ *)o;
  if (p->__pyx_v_current) {
    e = (*v)(p->__pyx_v_current, a); if (e) return e;
  }
  if (p->__pyx_v_repr_node) {
    e = (*v)(p->__pyx_v_repr_node, a); if (e) return e;
  }
  if (p->__pyx_v_representative) {
    e = (*v)(p->__pyx_v_representative, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get___slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_3___get__},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_3___get__},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_3___get__},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get___spec = {
  "pytact.data_reader.__pyx_scope_struct_3___get__",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get___slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get__ = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_3___get__", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_3___get__), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_3___get__, /*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_6pytact_11data_reader___pyx_scope_struct_3___get__, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_3___get__, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_cls);
  Py_CLEAR(p->__pyx_v_cluster);
  Py_CLEAR(p->__pyx_v_definitions);
  Py_CLEAR(p->__pyx_v_definitions_it);
  Py_CLEAR(p->__pyx_v_n);
  Py_CLEAR(p->__pyx_v_node);
  Py_CLEAR(p->__pyx_v_rep);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters *)o;
  if (p->__pyx_v_cls) {
    e = (*v)(((PyObject *)p->__pyx_v_cls), a); if (e) return e;
  }
  if (p->__pyx_v_cluster) {
    e = (*v)(p->__pyx_v_cluster, a); if (e) return e;
  }
  if (p->__pyx_v_definitions) {
    e = (*v)(p->__pyx_v_definitions, a); if (e) return e;
  }
  if (p->__pyx_v_definitions_it) {
    e = (*v)(p->__pyx_v_definitions_it, a); if (e) return e;
  }
  if (p->__pyx_v_n) {
    e = (*v)(p->__pyx_v_n, a); if (e) return e;
  }
  if (p->__pyx_v_node) {
    e = (*v)(p->__pyx_v_node, a); if (e) return e;
  }
  if (p->__pyx_v_rep) {
    e = (*v)(p->__pyx_v_rep, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters_spec = {
  "pytact.data_reader.__pyx_scope_struct_4__group_by_clusters",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_4__group_by_clusters", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters, /*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_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_5___get__[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_5___get__ = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_5___get__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_5___get__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_5___get__[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_5___get__];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__));
    (void) PyObject_INIT(o, t);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *)o);
  new((void*)&(p->__pyx_v_dependencies))  ::capnp::List<capnp::Text, ::capnp::Kind::BLOB>::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_5___get__(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *)o;
  __Pyx_call_destructor(p->__pyx_v_dependencies);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_5___get__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_5___get__[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_5___get__++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__ *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get___slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_5___get__},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_5___get__},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get___spec = {
  "pytact.data_reader.__pyx_scope_struct_5___get__",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get___slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get__ = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_5___get__", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_5___get__), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_5___get__, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_5___get__, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_6_data_reader[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_6_data_reader = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_6_data_reader(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_6_data_reader > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_6_data_reader[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_6_data_reader];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_6_data_reader(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_dataset_path);
  Py_CLEAR(p->__pyx_v_lreader);
  Py_CLEAR(p->__pyx_t_0);
  Py_CLEAR(p->__pyx_t_1);
  Py_CLEAR(p->__pyx_t_2);
  Py_CLEAR(p->__pyx_t_3);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_6_data_reader < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_6_data_reader[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_6_data_reader++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_6_data_reader(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader *)o;
  if (p->__pyx_v_dataset_path) {
    e = (*v)(p->__pyx_v_dataset_path, a); if (e) return e;
  }
  if (p->__pyx_v_lreader) {
    e = (*v)(p->__pyx_v_lreader, 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;
  }
  if (p->__pyx_t_2) {
    e = (*v)(p->__pyx_t_2, a); if (e) return e;
  }
  if (p->__pyx_t_3) {
    e = (*v)(p->__pyx_t_3, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_6_data_reader},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_6_data_reader},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_6_data_reader},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader_spec = {
  "pytact.data_reader.__pyx_scope_struct_6_data_reader",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_6_data_reader", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_6_data_reader), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_6_data_reader, /*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_6pytact_11data_reader___pyx_scope_struct_6_data_reader, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_6_data_reader, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *)o);
  new((void*)&(p->__pyx_v_graph_index)) struct __pyx_t_6pytact_11data_reader_GraphIndex();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *)o;
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->__pyx_v_graph_index);
  Py_CLEAR(p->__pyx_v_dr);
  Py_CLEAR(p->__pyx_v_init);
  Py_CLEAR(p->__pyx_v_stack);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize *)o;
  if (p->__pyx_v_dr) {
    e = (*v)(p->__pyx_v_dr, a); if (e) return e;
  }
  if (p->__pyx_v_init) {
    e = (*v)(((PyObject *)p->__pyx_v_init), a); if (e) return e;
  }
  if (p->__pyx_v_stack) {
    e = (*v)(((PyObject *)p->__pyx_v_stack), a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize_spec = {
  "pytact.data_reader.__pyx_scope_struct_7_online_definitions_initialize",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_7_online_definitions_initialize", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize, /*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_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *p;
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  p = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *)o);
  new((void*)&(p->__pyx_v_graph_index)) struct __pyx_t_6pytact_11data_reader_GraphIndex();
  new((void*)&(p->__pyx_v_p)) PredictionProtocol::Request::Predict::Reader();
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *)o;
  PyObject_GC_UnTrack(o);
  __Pyx_call_destructor(p->__pyx_v_graph_index);
  __Pyx_call_destructor(p->__pyx_v_p);
  Py_CLEAR(p->__pyx_v_base);
  Py_CLEAR(p->__pyx_v_predict);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict *)o;
  if (p->__pyx_v_base) {
    e = (*v)(((PyObject *)p->__pyx_v_base), a); if (e) return e;
  }
  if (p->__pyx_v_predict) {
    e = (*v)(((PyObject *)p->__pyx_v_predict), a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict_spec = {
  "pytact.data_reader.__pyx_scope_struct_8_online_data_predict",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_8_online_data_predict", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict, /*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_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_cython_msg);
  Py_CLEAR(p->__pyx_v_msg);
  Py_CLEAR(p->__pyx_v_next_disabled_sigint);
  Py_CLEAR(p->__pyx_v_reader);
  Py_CLEAR(p->__pyx_v_record);
  Py_CLEAR(p->__pyx_v_response);
  Py_CLEAR(p->__pyx_v_socket);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel *)o;
  if (p->__pyx_v_cython_msg) {
    e = (*v)(((PyObject *)p->__pyx_v_cython_msg), a); if (e) return e;
  }
  if (p->__pyx_v_msg) {
    e = (*v)(p->__pyx_v_msg, a); if (e) return e;
  }
  if (p->__pyx_v_next_disabled_sigint) {
    e = (*v)(p->__pyx_v_next_disabled_sigint, a); if (e) return e;
  }
  if (p->__pyx_v_reader) {
    e = (*v)(p->__pyx_v_reader, a); if (e) return e;
  }
  if (p->__pyx_v_record) {
    e = (*v)(p->__pyx_v_record, a); if (e) return e;
  }
  if (p->__pyx_v_response) {
    e = (*v)(p->__pyx_v_response, a); if (e) return e;
  }
  if (p->__pyx_v_socket) {
    e = (*v)(p->__pyx_v_socket, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel_spec = {
  "pytact.data_reader.__pyx_scope_struct_9_capnp_message_generator_lowlevel",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_9_capnp_message_generator_lowlevel", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel, /*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_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_check);
  Py_CLEAR(p->__pyx_v_cython_msg);
  Py_CLEAR(p->__pyx_v_message_file);
  Py_CLEAR(p->__pyx_v_message_reader);
  Py_CLEAR(p->__pyx_v_recorded_response);
  Py_CLEAR(p->__pyx_v_request);
  Py_CLEAR(p->__pyx_v_response);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel *)o;
  if (p->__pyx_v_check) {
    e = (*v)(p->__pyx_v_check, a); if (e) return e;
  }
  if (p->__pyx_v_cython_msg) {
    e = (*v)(((PyObject *)p->__pyx_v_cython_msg), a); if (e) return e;
  }
  if (p->__pyx_v_message_file) {
    e = (*v)(p->__pyx_v_message_file, a); if (e) return e;
  }
  if (p->__pyx_v_message_reader) {
    e = (*v)(p->__pyx_v_message_reader, a); if (e) return e;
  }
  if (p->__pyx_v_recorded_response) {
    e = (*v)(p->__pyx_v_recorded_response, a); if (e) return e;
  }
  if (p->__pyx_v_request) {
    e = (*v)(p->__pyx_v_request, a); if (e) return e;
  }
  if (p->__pyx_v_response) {
    e = (*v)(p->__pyx_v_response, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel_spec = {
  "pytact.data_reader.__pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel, /*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_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_alignment);
  Py_CLEAR(p->__pyx_9genexpr11__pyx_v_d);
  Py_CLEAR(p->__pyx_v_definitions);
  Py_CLEAR(p->__pyx_v_defs);
  Py_CLEAR(p->__pyx_v_init);
  Py_CLEAR(p->__pyx_v_lgenerator);
  Py_CLEAR(p->__pyx_v_msg);
  Py_CLEAR(p->__pyx_v_pg);
  Py_CLEAR(p->__pyx_v_prediction_generator_sub);
  Py_CLEAR(p->__pyx_v_preds);
  Py_CLEAR(p->__pyx_v_proof_state);
  Py_CLEAR(p->__pyx_v_response);
  Py_CLEAR(p->__pyx_t_0);
  Py_CLEAR(p->__pyx_t_1);
  Py_CLEAR(p->__pyx_t_2);
  Py_CLEAR(p->__pyx_t_3);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator *)o;
  if (p->__pyx_v_alignment) {
    e = (*v)(p->__pyx_v_alignment, a); if (e) return e;
  }
  if (p->__pyx_9genexpr11__pyx_v_d) {
    e = (*v)(p->__pyx_9genexpr11__pyx_v_d, a); if (e) return e;
  }
  if (p->__pyx_v_definitions) {
    e = (*v)(p->__pyx_v_definitions, a); if (e) return e;
  }
  if (p->__pyx_v_defs) {
    e = (*v)(((PyObject *)p->__pyx_v_defs), a); if (e) return e;
  }
  if (p->__pyx_v_init) {
    e = (*v)(p->__pyx_v_init, a); if (e) return e;
  }
  if (p->__pyx_v_lgenerator) {
    e = (*v)(p->__pyx_v_lgenerator, a); if (e) return e;
  }
  if (p->__pyx_v_msg) {
    e = (*v)(p->__pyx_v_msg, a); if (e) return e;
  }
  if (p->__pyx_v_pg) {
    e = (*v)(p->__pyx_v_pg, a); if (e) return e;
  }
  if (p->__pyx_v_prediction_generator_sub) {
    e = (*v)(p->__pyx_v_prediction_generator_sub, a); if (e) return e;
  }
  if (p->__pyx_v_preds) {
    e = (*v)(p->__pyx_v_preds, a); if (e) return e;
  }
  if (p->__pyx_v_proof_state) {
    e = (*v)(p->__pyx_v_proof_state, a); if (e) return e;
  }
  if (p->__pyx_v_response) {
    e = (*v)(p->__pyx_v_response, 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;
  }
  if (p->__pyx_t_2) {
    e = (*v)(p->__pyx_t_2, a); if (e) return e;
  }
  if (p->__pyx_t_3) {
    e = (*v)(p->__pyx_t_3, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator_spec = {
  "pytact.data_reader.__pyx_scope_struct_11_prediction_generator",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_11_prediction_generator", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator, /*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_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub_spec = {
  "pytact.data_reader.__pyx_scope_struct_12_prediction_generator_sub",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_12_prediction_generator_sub", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub, /*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_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_13_sub_context[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_13_sub_context = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_13_sub_context(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_13_sub_context > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_13_sub_context[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_13_sub_context];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_13_sub_context(PyObject *o) {
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_propagate);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_13_sub_context < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_13_sub_context[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_13_sub_context++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_13_sub_context(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *p = (struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context *)o;
  if (p->__pyx_v_propagate) {
    e = (*v)(p->__pyx_v_propagate, a); if (e) return e;
  }
  if (p->__pyx_v_self) {
    e = (*v)(p->__pyx_v_self, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_13_sub_context},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_6pytact_11data_reader___pyx_scope_struct_13_sub_context},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_13_sub_context},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context_spec = {
  "pytact.data_reader.__pyx_scope_struct_13_sub_context",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_13_sub_context", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_13_sub_context), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_13_sub_context, /*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_6pytact_11data_reader___pyx_scope_struct_13_sub_context, /*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*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_13_sub_context, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context *__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_14_new_context[8];
static int __pyx_freecount_6pytact_11data_reader___pyx_scope_struct_14_new_context = 0;

static PyObject *__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_14_new_context(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_COMPILING_IN_LIMITED_API
  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
  o = alloc_func(t, 0);
  #else
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_14_new_context > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context)))) {
    o = (PyObject*)__pyx_freelist_6pytact_11data_reader___pyx_scope_struct_14_new_context[--__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_14_new_context];
    memset(o, 0, sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context));
    (void) PyObject_INIT(o, t);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  #endif
  return o;
}

static void __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_14_new_context(PyObject *o) {
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_14_new_context < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context)))) {
    __pyx_freelist_6pytact_11data_reader___pyx_scope_struct_14_new_context[__pyx_freecount_6pytact_11data_reader___pyx_scope_struct_14_new_context++] = ((struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_14_new_context},
  {Py_tp_new, (void *)__pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_14_new_context},
  {0, 0},
};
static PyType_Spec __pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context_spec = {
  "pytact.data_reader.__pyx_scope_struct_14_new_context",
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER,
  __pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context_slots,
};
#else

static PyTypeObject __pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context = {
  PyVarObject_HEAD_INIT(0, 0)
  "pytact.data_reader.""__pyx_scope_struct_14_new_context", /*tp_name*/
  sizeof(struct __pyx_obj_6pytact_11data_reader___pyx_scope_struct_14_new_context), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_6pytact_11data_reader___pyx_scope_struct_14_new_context, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_6pytact_11data_reader___pyx_scope_struct_14_new_context, /*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
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #endif
  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};
#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
/* #### Code section: pystring_table ### */

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  #if CYTHON_USE_MODULE_STATE
  {0, __pyx_k_ACCESS_READ, sizeof(__pyx_k_ACCESS_READ), 0, 0, 1, 1},
  {0, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1},
  {0, __pyx_k_Argument_List, sizeof(__pyx_k_Argument_List), 0, 0, 1, 1},
  {0, __pyx_k_Argument_List___reduce_cython, sizeof(__pyx_k_Argument_List___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_Argument_List___setstate_cython, sizeof(__pyx_k_Argument_List___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1},
  {0, __pyx_k_BinaryIO, sizeof(__pyx_k_BinaryIO), 0, 0, 1, 1},
  {0, __pyx_k_BinaryIO_None, sizeof(__pyx_k_BinaryIO_None), 0, 0, 1, 0},
  {0, __pyx_k_Callable, sizeof(__pyx_k_Callable), 0, 0, 1, 1},
  {0, __pyx_k_Callable_Definition_bool, sizeof(__pyx_k_Callable_Definition_bool), 0, 0, 1, 0},
  {0, __pyx_k_Callable_int_T, sizeof(__pyx_k_Callable_int_T), 0, 0, 1, 0},
  {0, __pyx_k_Capnp_protocol_error, sizeof(__pyx_k_Capnp_protocol_error), 0, 1, 0, 0},
  {0, __pyx_k_CheckAlignmentMessage, sizeof(__pyx_k_CheckAlignmentMessage), 0, 0, 1, 1},
  {0, __pyx_k_CheckAlignmentResponse, sizeof(__pyx_k_CheckAlignmentResponse), 0, 0, 1, 1},
  {0, __pyx_k_Constructor, sizeof(__pyx_k_Constructor), 0, 0, 1, 1},
  {0, __pyx_k_Dataset, sizeof(__pyx_k_Dataset), 0, 0, 1, 1},
  {0, __pyx_k_Dataset_Definition_List, sizeof(__pyx_k_Dataset_Definition_List), 0, 0, 1, 1},
  {0, __pyx_k_Dataset_Definition_List___reduce, sizeof(__pyx_k_Dataset_Definition_List___reduce), 0, 0, 1, 1},
  {0, __pyx_k_Dataset_Definition_List___setsta, sizeof(__pyx_k_Dataset_Definition_List___setsta), 0, 0, 1, 1},
  {0, __pyx_k_Dataset_Reader, sizeof(__pyx_k_Dataset_Reader), 0, 0, 1, 1},
  {0, __pyx_k_Dataset___get___locals_get, sizeof(__pyx_k_Dataset___get___locals_get), 0, 0, 1, 1},
  {0, __pyx_k_Dataset___reduce_cython, sizeof(__pyx_k_Dataset___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_Dataset___setstate_cython, sizeof(__pyx_k_Dataset___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_Dataset_clustered_definitions, sizeof(__pyx_k_Dataset_clustered_definitions), 0, 0, 1, 1},
  {0, __pyx_k_Dataset_definitions, sizeof(__pyx_k_Dataset_definitions), 0, 0, 1, 1},
  {0, __pyx_k_Dataset_does_not_exist, sizeof(__pyx_k_Dataset_does_not_exist), 0, 1, 0, 0},
  {0, __pyx_k_Dataset_node_by_id, sizeof(__pyx_k_Dataset_node_by_id), 0, 0, 1, 1},
  {0, __pyx_k_Definition, sizeof(__pyx_k_Definition), 0, 0, 1, 1},
  {0, __pyx_k_Definition___get, sizeof(__pyx_k_Definition___get), 0, 0, 1, 1},
  {0, __pyx_k_Definition___reduce_cython, sizeof(__pyx_k_Definition___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_Definition___setstate_cython, sizeof(__pyx_k_Definition___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_Definition__global_context, sizeof(__pyx_k_Definition__global_context), 0, 0, 1, 1},
  {0, __pyx_k_Definition__group_by_clusters, sizeof(__pyx_k_Definition__group_by_clusters), 0, 0, 1, 1},
  {0, __pyx_k_Definition_clustered_global_cont, sizeof(__pyx_k_Definition_clustered_global_cont), 0, 0, 1, 1},
  {0, __pyx_k_Definition_global_context, sizeof(__pyx_k_Definition_global_context), 0, 0, 1, 1},
  {0, __pyx_k_Discharged, sizeof(__pyx_k_Discharged), 0, 0, 1, 1},
  {0, __pyx_k_EdgeTarget_List, sizeof(__pyx_k_EdgeTarget_List), 0, 0, 1, 1},
  {0, __pyx_k_EdgeTarget_List___reduce_cython, sizeof(__pyx_k_EdgeTarget_List___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_EdgeTarget_List___setstate_cytho, sizeof(__pyx_k_EdgeTarget_List___setstate_cytho), 0, 0, 1, 1},
  {0, __pyx_k_ExitStack, sizeof(__pyx_k_ExitStack), 0, 0, 1, 1},
  {0, __pyx_k_Generator, sizeof(__pyx_k_Generator), 0, 0, 1, 1},
  {0, __pyx_k_Generator_Any_None_None, sizeof(__pyx_k_Generator_Any_None_None), 0, 0, 1, 0},
  {0, __pyx_k_Generator_GlobalContextMessage_P, sizeof(__pyx_k_Generator_GlobalContextMessage_P), 0, 0, 1, 0},
  {0, __pyx_k_Generator_GlobalContextSets_None, sizeof(__pyx_k_Generator_GlobalContextSets_None), 0, 0, 1, 0},
  {0, __pyx_k_Generator_LowlevelDataReader_Non, sizeof(__pyx_k_Generator_LowlevelDataReader_Non), 0, 0, 1, 0},
  {0, __pyx_k_Generator_OnlineDefinitionsReade, sizeof(__pyx_k_Generator_OnlineDefinitionsReade), 0, 0, 1, 0},
  {0, __pyx_k_Generator_ProofState_None_None, sizeof(__pyx_k_Generator_ProofState_None_None), 0, 0, 1, 0},
  {0, __pyx_k_Generator_dict_Path_Dataset_None, sizeof(__pyx_k_Generator_dict_Path_Dataset_None), 0, 0, 1, 0},
  {0, __pyx_k_Generator_pytact_graph_api_capnp, sizeof(__pyx_k_Generator_pytact_graph_api_capnp), 0, 0, 1, 0},
  {0, __pyx_k_GlobalContextMessage, sizeof(__pyx_k_GlobalContextMessage), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets, sizeof(__pyx_k_GlobalContextSets), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets_None, sizeof(__pyx_k_GlobalContextSets_None), 0, 0, 1, 0},
  {0, __pyx_k_GlobalContextSets___init, sizeof(__pyx_k_GlobalContextSets___init), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets__global_contex, sizeof(__pyx_k_GlobalContextSets__global_contex), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets__propagate, sizeof(__pyx_k_GlobalContextSets__propagate), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets_global_context, sizeof(__pyx_k_GlobalContextSets_global_context), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets_new_context, sizeof(__pyx_k_GlobalContextSets_new_context), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets_new_context_lo, sizeof(__pyx_k_GlobalContextSets_new_context_lo), 0, 0, 1, 1},
  {0, __pyx_k_GlobalContextSets_sub_context, sizeof(__pyx_k_GlobalContextSets_sub_context), 0, 0, 1, 1},
  {0, __pyx_k_Incorrect_predictions_received, sizeof(__pyx_k_Incorrect_predictions_received), 0, 1, 0, 0},
  {0, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
  {0, __pyx_k_Inductive, sizeof(__pyx_k_Inductive), 0, 0, 1, 1},
  {0, __pyx_k_Iterable, sizeof(__pyx_k_Iterable), 0, 0, 1, 1},
  {0, __pyx_k_Iterable_Definition, sizeof(__pyx_k_Iterable_Definition), 0, 0, 1, 0},
  {0, __pyx_k_Iterable_list_Definition, sizeof(__pyx_k_Iterable_list_Definition), 0, 0, 1, 0},
  {0, __pyx_k_KeyError, sizeof(__pyx_k_KeyError), 0, 0, 1, 1},
  {0, __pyx_k_Lazily_retrieve_a_the_global_con, sizeof(__pyx_k_Lazily_retrieve_a_the_global_con), 0, 0, 1, 0},
  {0, __pyx_k_LowlevelDataReader, sizeof(__pyx_k_LowlevelDataReader), 0, 0, 1, 1},
  {0, __pyx_k_LowlevelDataReader___reduce_cyth, sizeof(__pyx_k_LowlevelDataReader___reduce_cyth), 0, 0, 1, 1},
  {0, __pyx_k_LowlevelDataReader___setstate_cy, sizeof(__pyx_k_LowlevelDataReader___setstate_cy), 0, 0, 1, 1},
  {0, __pyx_k_LowlevelDataReader_local_to_glob, sizeof(__pyx_k_LowlevelDataReader_local_to_glob), 0, 0, 1, 1},
  {0, __pyx_k_ManualConstant, sizeof(__pyx_k_ManualConstant), 0, 0, 1, 1},
  {0, __pyx_k_ManualSectionConstant, sizeof(__pyx_k_ManualSectionConstant), 0, 0, 1, 1},
  {0, __pyx_k_Map, sizeof(__pyx_k_Map), 0, 0, 1, 1},
  {0, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
  {0, __pyx_k_Mount_did_not_appear, sizeof(__pyx_k_Mount_did_not_appear), 0, 1, 0, 0},
  {0, __pyx_k_Node, sizeof(__pyx_k_Node), 0, 0, 1, 1},
  {0, __pyx_k_NodeHash, sizeof(__pyx_k_NodeHash), 0, 0, 1, 1},
  {0, __pyx_k_NodeId, sizeof(__pyx_k_NodeId), 0, 0, 1, 1},
  {0, __pyx_k_Node_List, sizeof(__pyx_k_Node_List), 0, 0, 1, 1},
  {0, __pyx_k_Node_List___reduce_cython, sizeof(__pyx_k_Node_List___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_Node_List___setstate_cython, sizeof(__pyx_k_Node_List___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_Node___reduce_cython, sizeof(__pyx_k_Node___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_Node___setstate_cython, sizeof(__pyx_k_Node___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_Not_all_prediction_requests_were, sizeof(__pyx_k_Not_all_prediction_requests_were), 0, 1, 0, 0},
  {0, __pyx_k_OnlineDefinitionsReader, sizeof(__pyx_k_OnlineDefinitionsReader), 0, 0, 1, 1},
  {0, __pyx_k_OnlineDefinitionsReader___reduce, sizeof(__pyx_k_OnlineDefinitionsReader___reduce), 0, 0, 1, 1},
  {0, __pyx_k_OnlineDefinitionsReader___setsta, sizeof(__pyx_k_OnlineDefinitionsReader___setsta), 0, 0, 1, 1},
  {0, __pyx_k_OnlineDefinitionsReader_clustere, sizeof(__pyx_k_OnlineDefinitionsReader_clustere), 0, 0, 1, 1},
  {0, __pyx_k_OnlineDefinitionsReader_definiti, sizeof(__pyx_k_OnlineDefinitionsReader_definiti), 0, 0, 1, 1},
  {0, __pyx_k_OnlineDefinitionsReader_local_to, sizeof(__pyx_k_OnlineDefinitionsReader_local_to), 0, 0, 1, 1},
  {0, __pyx_k_Options_across_files_True_and_sp, sizeof(__pyx_k_Options_across_files_True_and_sp), 0, 1, 0, 0},
  {0, __pyx_k_Original, sizeof(__pyx_k_Original), 0, 0, 1, 1},
  {0, __pyx_k_Out_of_bounds, sizeof(__pyx_k_Out_of_bounds), 0, 1, 0, 0},
  {0, __pyx_k_Outcome, sizeof(__pyx_k_Outcome), 0, 0, 1, 1},
  {0, __pyx_k_Outcome_List, sizeof(__pyx_k_Outcome_List), 0, 0, 1, 1},
  {0, __pyx_k_Outcome_List___reduce_cython, sizeof(__pyx_k_Outcome_List___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_Outcome_List___setstate_cython, sizeof(__pyx_k_Outcome_List___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_Outcome___reduce_cython, sizeof(__pyx_k_Outcome___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_Outcome___setstate_cython, sizeof(__pyx_k_Outcome___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_PIPE, sizeof(__pyx_k_PIPE), 0, 0, 1, 1},
  {0, __pyx_k_Path, sizeof(__pyx_k_Path), 0, 0, 1, 1},
  {0, __pyx_k_Path_2, sizeof(__pyx_k_Path_2), 0, 1, 0, 0},
  {0, __pyx_k_PredictionProtocol, sizeof(__pyx_k_PredictionProtocol), 0, 0, 1, 1},
  {0, __pyx_k_Projection, sizeof(__pyx_k_Projection), 0, 0, 1, 1},
  {0, __pyx_k_ProofState, sizeof(__pyx_k_ProofState), 0, 0, 1, 1},
  {0, __pyx_k_ProofStateId, sizeof(__pyx_k_ProofStateId), 0, 0, 1, 1},
  {0, __pyx_k_ProofState_List, sizeof(__pyx_k_ProofState_List), 0, 0, 1, 1},
  {0, __pyx_k_ProofState_List___reduce_cython, sizeof(__pyx_k_ProofState_List___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_ProofState_List___setstate_cytho, sizeof(__pyx_k_ProofState_List___setstate_cytho), 0, 0, 1, 1},
  {0, __pyx_k_ProofState___reduce_cython, sizeof(__pyx_k_ProofState___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_ProofState___setstate_cython, sizeof(__pyx_k_ProofState___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_ProofStep, sizeof(__pyx_k_ProofStep), 0, 0, 1, 1},
  {0, __pyx_k_ProofStep_List, sizeof(__pyx_k_ProofStep_List), 0, 0, 1, 1},
  {0, __pyx_k_ProofStep_List___reduce_cython, sizeof(__pyx_k_ProofStep_List___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_ProofStep_List___setstate_cython, sizeof(__pyx_k_ProofStep_List___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_ProofStep___reduce_cython, sizeof(__pyx_k_ProofStep___reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_ProofStep___setstate_cython, sizeof(__pyx_k_ProofStep___setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_RLIMIT_NOFILE, sizeof(__pyx_k_RLIMIT_NOFILE), 0, 0, 1, 1},
  {0, __pyx_k_Representative_List, sizeof(__pyx_k_Representative_List), 0, 0, 1, 1},
  {0, __pyx_k_Representative_List___reduce_cyt, sizeof(__pyx_k_Representative_List___reduce_cyt), 0, 0, 1, 1},
  {0, __pyx_k_Representative_List___setstate_c, sizeof(__pyx_k_Representative_List___setstate_c), 0, 0, 1, 1},
  {0, __pyx_k_Request, sizeof(__pyx_k_Request), 0, 0, 1, 1},
  {0, __pyx_k_Response, sizeof(__pyx_k_Response), 0, 0, 1, 1},
  {0, __pyx_k_SIGINT, sizeof(__pyx_k_SIGINT), 0, 0, 1, 1},
  {0, __pyx_k_SIG_DFL, sizeof(__pyx_k_SIG_DFL), 0, 0, 1, 1},
  {0, __pyx_k_Sequence, sizeof(__pyx_k_Sequence), 0, 0, 1, 1},
  {0, __pyx_k_Sequence_ProofStep, sizeof(__pyx_k_Sequence_ProofStep), 0, 0, 1, 0},
  {0, __pyx_k_Servers_response, sizeof(__pyx_k_Servers_response), 0, 1, 0, 0},
  {0, __pyx_k_Squashfuse_error, sizeof(__pyx_k_Squashfuse_error), 0, 1, 0, 0},
  {0, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 0, 1, 1},
  {0, __pyx_k_Substituted, sizeof(__pyx_k_Substituted), 0, 0, 1, 1},
  {0, __pyx_k_T, sizeof(__pyx_k_T), 0, 0, 1, 1},
  {0, __pyx_k_T, sizeof(__pyx_k_T), 0, 1, 0, 1},
  {0, __pyx_k_TacticId, sizeof(__pyx_k_TacticId), 0, 0, 1, 1},
  {0, __pyx_k_TacticPredictionGraph, sizeof(__pyx_k_TacticPredictionGraph), 0, 0, 1, 1},
  {0, __pyx_k_TacticPredictionText, sizeof(__pyx_k_TacticPredictionText), 0, 0, 1, 1},
  {0, __pyx_k_TacticPredictionsGraph, sizeof(__pyx_k_TacticPredictionsGraph), 0, 0, 1, 1},
  {0, __pyx_k_TacticPredictionsText, sizeof(__pyx_k_TacticPredictionsText), 0, 0, 1, 1},
  {0, __pyx_k_TacticalConstant, sizeof(__pyx_k_TacticalConstant), 0, 0, 1, 1},
  {0, __pyx_k_TacticalSectionConstant, sizeof(__pyx_k_TacticalSectionConstant), 0, 0, 1, 1},
  {0, __pyx_k_The_servers_response_to_a, sizeof(__pyx_k_The_servers_response_to_a), 0, 1, 0, 0},
  {0, __pyx_k_There_does_not_appear_to_be_a_da, sizeof(__pyx_k_There_does_not_appear_to_be_a_da), 0, 1, 0, 0},
  {0, __pyx_k_This_library_is_compiled_for_a_d, sizeof(__pyx_k_This_library_is_compiled_for_a_d), 0, 1, 0, 0},
  {0, __pyx_k_TupleLike, sizeof(__pyx_k_TupleLike), 0, 0, 1, 1},
  {0, __pyx_k_TupleLike___getitem, sizeof(__pyx_k_TupleLike___getitem), 0, 0, 1, 1},
  {0, __pyx_k_TupleLike___init, sizeof(__pyx_k_TupleLike___init), 0, 0, 1, 1},
  {0, __pyx_k_TupleLike___len, sizeof(__pyx_k_TupleLike___len), 0, 0, 1, 1},
  {0, __pyx_k_TypeAlias, sizeof(__pyx_k_TypeAlias), 0, 0, 1, 1},
  {0, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
  {0, __pyx_k_TypeVar, sizeof(__pyx_k_TypeVar), 0, 0, 1, 1},
  {0, __pyx_k_Unable_to_mount_dataset, sizeof(__pyx_k_Unable_to_mount_dataset), 0, 1, 0, 0},
  {0, __pyx_k_Unable_to_mount_dataset_Executab, sizeof(__pyx_k_Unable_to_mount_dataset_Executab), 0, 1, 0, 0},
  {0, __pyx_k_Unable_to_mount_dataset_Mountpoi, sizeof(__pyx_k_Unable_to_mount_dataset_Mountpoi), 0, 1, 0, 0},
  {0, __pyx_k_Unable_to_mount_dataset_Squashfu, sizeof(__pyx_k_Unable_to_mount_dataset_Squashfu), 0, 1, 0, 0},
  {0, __pyx_k_Union, sizeof(__pyx_k_Union), 0, 0, 1, 1},
  {0, __pyx_k_Unknown, sizeof(__pyx_k_Unknown), 0, 0, 1, 1},
  {0, __pyx_k_Unresolvable, sizeof(__pyx_k_Unresolvable), 0, 0, 1, 1},
  {0, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
  {0, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0},
  {0, __pyx_k__134, sizeof(__pyx_k__134), 0, 0, 1, 1},
  {0, __pyx_k__25, sizeof(__pyx_k__25), 0, 1, 0, 0},
  {0, __pyx_k__31, sizeof(__pyx_k__31), 0, 0, 1, 1},
  {0, __pyx_k__33, sizeof(__pyx_k__33), 0, 0, 1, 1},
  {0, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0},
  {0, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0},
  {0, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0},
  {0, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1},
  {0, __pyx_k_access, sizeof(__pyx_k_access), 0, 0, 1, 1},
  {0, __pyx_k_across_files, sizeof(__pyx_k_across_files), 0, 0, 1, 1},
  {0, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1},
  {0, __pyx_k_alignment, sizeof(__pyx_k_alignment), 0, 0, 1, 1},
  {0, __pyx_k_annotations, sizeof(__pyx_k_annotations), 0, 0, 1, 1},
  {0, __pyx_k_apic, sizeof(__pyx_k_apic), 0, 0, 1, 1},
  {0, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
  {0, __pyx_k_arguments, sizeof(__pyx_k_arguments), 0, 0, 1, 1},
  {0, __pyx_k_arguments, sizeof(__pyx_k_arguments), 0, 1, 0, 1},
  {0, __pyx_k_as_builder, sizeof(__pyx_k_as_builder), 0, 0, 1, 1},
  {0, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1},
  {0, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1},
  {0, __pyx_k_bin, sizeof(__pyx_k_bin), 0, 1, 0, 0},
  {0, __pyx_k_bool, sizeof(__pyx_k_bool), 0, 0, 1, 1},
  {0, __pyx_k_but_file, sizeof(__pyx_k_but_file), 0, 1, 0, 0},
  {0, __pyx_k_but_file_Coq_sent_a_message_ver, sizeof(__pyx_k_but_file_Coq_sent_a_message_ver), 0, 1, 0, 0},
  {0, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
  {0, __pyx_k_cache, sizeof(__pyx_k_cache), 0, 0, 1, 1},
  {0, __pyx_k_capnp, sizeof(__pyx_k_capnp), 0, 0, 1, 1},
  {0, __pyx_k_capnp_message_generator, sizeof(__pyx_k_capnp_message_generator), 0, 0, 1, 1},
  {0, __pyx_k_capnp_message_generator_from_fil, sizeof(__pyx_k_capnp_message_generator_from_fil), 0, 0, 1, 1},
  {0, __pyx_k_capnp_message_generator_from_fil_2, sizeof(__pyx_k_capnp_message_generator_from_fil_2), 0, 0, 1, 1},
  {0, __pyx_k_capnp_message_generator_lowlevel, sizeof(__pyx_k_capnp_message_generator_lowlevel), 0, 0, 1, 1},
  {0, __pyx_k_capnp_message_generator_lowlevel_2, sizeof(__pyx_k_capnp_message_generator_lowlevel_2), 0, 0, 1, 1},
  {0, __pyx_k_cast, sizeof(__pyx_k_cast), 0, 0, 1, 1},
  {0, __pyx_k_check, sizeof(__pyx_k_check), 0, 0, 1, 1},
  {0, __pyx_k_child, sizeof(__pyx_k_child), 0, 0, 1, 1},
  {0, __pyx_k_child_graph, sizeof(__pyx_k_child_graph), 0, 0, 1, 1},
  {0, __pyx_k_children, sizeof(__pyx_k_children), 0, 0, 1, 1},
  {0, __pyx_k_children_index, sizeof(__pyx_k_children_index), 0, 0, 1, 1},
  {0, __pyx_k_children_limit, sizeof(__pyx_k_children_limit), 0, 0, 1, 1},
  {0, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1},
  {0, __pyx_k_clear_write_flag, sizeof(__pyx_k_clear_write_flag), 0, 0, 1, 1},
  {0, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
  {0, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1},
  {0, __pyx_k_cls, sizeof(__pyx_k_cls), 0, 0, 1, 1},
  {0, __pyx_k_cluster, sizeof(__pyx_k_cluster), 0, 0, 1, 1},
  {0, __pyx_k_cluster_representative, sizeof(__pyx_k_cluster_representative), 0, 0, 1, 1},
  {0, __pyx_k_clustered_definitions, sizeof(__pyx_k_clustered_definitions), 0, 0, 1, 1},
  {0, __pyx_k_clustered_global_context, sizeof(__pyx_k_clustered_global_context), 0, 0, 1, 1},
  {0, __pyx_k_collections_abc, sizeof(__pyx_k_collections_abc), 0, 0, 1, 1},
  {0, __pyx_k_confidence, sizeof(__pyx_k_confidence), 0, 0, 1, 1},
  {0, __pyx_k_confidence, sizeof(__pyx_k_confidence), 0, 1, 0, 1},
  {0, __pyx_k_contains_data_versioned_as, sizeof(__pyx_k_contains_data_versioned_as), 0, 1, 0, 0},
  {0, __pyx_k_context, sizeof(__pyx_k_context), 0, 0, 1, 1},
  {0, __pyx_k_contextlib, sizeof(__pyx_k_contextlib), 0, 0, 1, 1},
  {0, __pyx_k_contextmanager, sizeof(__pyx_k_contextmanager), 0, 0, 1, 1},
  {0, __pyx_k_convert_predictions, sizeof(__pyx_k_convert_predictions), 0, 0, 1, 1},
  {0, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
  {0, __pyx_k_count_2, sizeof(__pyx_k_count_2), 0, 0, 1, 1},
  {0, __pyx_k_create_mmap, sizeof(__pyx_k_create_mmap), 0, 0, 1, 1},
  {0, __pyx_k_currentVersion, sizeof(__pyx_k_currentVersion), 0, 0, 1, 1},
  {0, __pyx_k_current_node, sizeof(__pyx_k_current_node), 0, 0, 1, 1},
  {0, __pyx_k_current_thread, sizeof(__pyx_k_current_thread), 0, 0, 1, 1},
  {0, __pyx_k_cython_msg, sizeof(__pyx_k_cython_msg), 0, 0, 1, 1},
  {0, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1},
  {0, __pyx_k_data_reader, sizeof(__pyx_k_data_reader), 0, 0, 1, 1},
  {0, __pyx_k_data_version, sizeof(__pyx_k_data_version), 0, 0, 1, 1},
  {0, __pyx_k_dataclass, sizeof(__pyx_k_dataclass), 0, 0, 1, 1},
  {0, __pyx_k_dataclasses, sizeof(__pyx_k_dataclasses), 0, 0, 1, 1},
  {0, __pyx_k_dataset, sizeof(__pyx_k_dataset), 0, 0, 1, 1},
  {0, __pyx_k_dataset_path, sizeof(__pyx_k_dataset_path), 0, 0, 1, 1},
  {0, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1},
  {0, __pyx_k_definition, sizeof(__pyx_k_definition), 0, 0, 1, 1},
  {0, __pyx_k_definition_dependencies, sizeof(__pyx_k_definition_dependencies), 0, 0, 1, 1},
  {0, __pyx_k_definitions, sizeof(__pyx_k_definitions), 0, 0, 1, 1},
  {0, __pyx_k_definitions_it, sizeof(__pyx_k_definitions_it), 0, 0, 1, 1},
  {0, __pyx_k_defs, sizeof(__pyx_k_defs), 0, 0, 1, 1},
  {0, __pyx_k_depIndex, sizeof(__pyx_k_depIndex), 0, 1, 0, 1},
  {0, __pyx_k_dep_index, sizeof(__pyx_k_dep_index), 0, 0, 1, 1},
  {0, __pyx_k_dependencies, sizeof(__pyx_k_dependencies), 0, 0, 1, 1},
  {0, __pyx_k_deps, sizeof(__pyx_k_deps), 0, 0, 1, 1},
  {0, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
  {0, __pyx_k_dict_Path_Dataset, sizeof(__pyx_k_dict_Path_Dataset), 0, 0, 1, 0},
  {0, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0},
  {0, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
  {0, __pyx_k_doesn_t_appear_to_be_the_root_o, sizeof(__pyx_k_doesn_t_appear_to_be_the_root_o), 0, 1, 0, 0},
  {0, __pyx_k_dr, sizeof(__pyx_k_dr), 0, 0, 1, 1},
  {0, __pyx_k_edge_target, sizeof(__pyx_k_edge_target), 0, 0, 1, 1},
  {0, __pyx_k_edges, sizeof(__pyx_k_edges), 0, 0, 1, 1},
  {0, __pyx_k_empty_online_definitions_initial, sizeof(__pyx_k_empty_online_definitions_initial), 0, 0, 1, 1},
  {0, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0},
  {0, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1},
  {0, __pyx_k_enter_context, sizeof(__pyx_k_enter_context), 0, 0, 1, 1},
  {0, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1},
  {0, __pyx_k_ep, sizeof(__pyx_k_ep), 0, 0, 1, 1},
  {0, __pyx_k_eprev, sizeof(__pyx_k_eprev), 0, 0, 1, 1},
  {0, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1},
  {0, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1},
  {0, __pyx_k_external_previous, sizeof(__pyx_k_external_previous), 0, 0, 1, 1},
  {0, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
  {0, __pyx_k_file_dataset_reader, sizeof(__pyx_k_file_dataset_reader), 0, 0, 1, 1},
  {0, __pyx_k_file_dataset_reader_locals_creat, sizeof(__pyx_k_file_dataset_reader_locals_creat), 0, 0, 1, 1},
  {0, __pyx_k_fileno, sizeof(__pyx_k_fileno), 0, 0, 1, 1},
  {0, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1},
  {0, __pyx_k_fname, sizeof(__pyx_k_fname), 0, 0, 1, 1},
  {0, __pyx_k_fnames, sizeof(__pyx_k_fnames), 0, 0, 1, 1},
  {0, __pyx_k_from_bytes, sizeof(__pyx_k_from_bytes), 0, 0, 1, 1},
  {0, __pyx_k_full, sizeof(__pyx_k_full), 0, 0, 1, 1},
  {0, __pyx_k_g, sizeof(__pyx_k_g), 0, 0, 1, 1},
  {0, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0},
  {0, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
  {0, __pyx_k_get_2, sizeof(__pyx_k_get_2), 0, 0, 1, 1},
  {0, __pyx_k_getitem, sizeof(__pyx_k_getitem), 0, 0, 1, 1},
  {0, __pyx_k_getrlimit, sizeof(__pyx_k_getrlimit), 0, 0, 1, 1},
  {0, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
  {0, __pyx_k_glob, sizeof(__pyx_k_glob), 0, 0, 1, 1},
  {0, __pyx_k_global_context, sizeof(__pyx_k_global_context), 0, 0, 1, 1},
  {0, __pyx_k_global_context_2, sizeof(__pyx_k_global_context_2), 0, 0, 1, 1},
  {0, __pyx_k_global_context_set, sizeof(__pyx_k_global_context_set), 0, 0, 1, 1},
  {0, __pyx_k_global_context_set_2, sizeof(__pyx_k_global_context_set_2), 0, 0, 1, 1},
  {0, __pyx_k_graph, sizeof(__pyx_k_graph), 0, 0, 1, 1},
  {0, __pyx_k_graph_api_capnp, sizeof(__pyx_k_graph_api_capnp), 0, 0, 1, 1},
  {0, __pyx_k_graph_api_capnp_cython, sizeof(__pyx_k_graph_api_capnp_cython), 0, 0, 1, 1},
  {0, __pyx_k_graph_index, sizeof(__pyx_k_graph_index), 0, 0, 1, 1},
  {0, __pyx_k_graphid, sizeof(__pyx_k_graphid), 0, 0, 1, 1},
  {0, __pyx_k_group_by_clusters, sizeof(__pyx_k_group_by_clusters), 0, 0, 1, 1},
  {0, __pyx_k_hard, sizeof(__pyx_k_hard), 0, 0, 1, 1},
  {0, __pyx_k_ident, sizeof(__pyx_k_ident), 0, 0, 1, 1},
  {0, __pyx_k_ident, sizeof(__pyx_k_ident), 0, 1, 0, 1},
  {0, __pyx_k_immutables, sizeof(__pyx_k_immutables), 0, 0, 1, 1},
  {0, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {0, __pyx_k_inclusive, sizeof(__pyx_k_inclusive), 0, 0, 1, 1},
  {0, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1},
  {0, __pyx_k_index_getter, sizeof(__pyx_k_index_getter), 0, 0, 1, 1},
  {0, __pyx_k_index_getter_2, sizeof(__pyx_k_index_getter_2), 0, 0, 1, 1},
  {0, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
  {0, __pyx_k_init_2, sizeof(__pyx_k_init_2), 0, 0, 1, 1},
  {0, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1},
  {0, __pyx_k_initialize, sizeof(__pyx_k_initialize), 0, 0, 1, 1},
  {0, __pyx_k_initialized, sizeof(__pyx_k_initialized), 0, 0, 1, 1},
  {0, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1},
  {0, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1},
  {0, __pyx_k_is_check_alignment, sizeof(__pyx_k_is_check_alignment), 0, 0, 1, 1},
  {0, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1},
  {0, __pyx_k_is_dir, sizeof(__pyx_k_is_dir), 0, 0, 1, 1},
  {0, __pyx_k_is_file, sizeof(__pyx_k_is_file), 0, 0, 1, 1},
  {0, __pyx_k_is_initialize, sizeof(__pyx_k_is_initialize), 0, 0, 1, 1},
  {0, __pyx_k_is_mount, sizeof(__pyx_k_is_mount), 0, 0, 1, 1},
  {0, __pyx_k_is_predict, sizeof(__pyx_k_is_predict), 0, 0, 1, 1},
  {0, __pyx_k_is_synchronize, sizeof(__pyx_k_is_synchronize), 0, 0, 1, 1},
  {0, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0},
  {0, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1},
  {0, __pyx_k_itertools, sizeof(__pyx_k_itertools), 0, 0, 1, 1},
  {0, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1},
  {0, __pyx_k_len, sizeof(__pyx_k_len), 0, 0, 1, 1},
  {0, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1},
  {0, __pyx_k_lgenerator, sizeof(__pyx_k_lgenerator), 0, 0, 1, 1},
  {0, __pyx_k_list_Definition, sizeof(__pyx_k_list_Definition), 0, 0, 1, 0},
  {0, __pyx_k_list_Node, sizeof(__pyx_k_list_Node), 0, 0, 1, 0},
  {0, __pyx_k_list_TacticPredictionsGraph, sizeof(__pyx_k_list_TacticPredictionsGraph), 0, 0, 1, 0},
  {0, __pyx_k_list_TacticPredictionsText, sizeof(__pyx_k_list_TacticPredictionsText), 0, 0, 1, 0},
  {0, __pyx_k_list_int, sizeof(__pyx_k_list_int), 0, 0, 1, 0},
  {0, __pyx_k_local_to_global, sizeof(__pyx_k_local_to_global), 0, 0, 1, 1},
  {0, __pyx_k_log_annotation, sizeof(__pyx_k_log_annotation), 0, 0, 1, 1},
  {0, __pyx_k_lowlevel, sizeof(__pyx_k_lowlevel), 0, 0, 1, 1},
  {0, __pyx_k_lowlevel_data_reader, sizeof(__pyx_k_lowlevel_data_reader), 0, 0, 1, 1},
  {0, __pyx_k_lowlevel_to_highlevel, sizeof(__pyx_k_lowlevel_to_highlevel), 0, 0, 1, 1},
  {0, __pyx_k_lreader, sizeof(__pyx_k_lreader), 0, 0, 1, 1},
  {0, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {0, __pyx_k_main_thread, sizeof(__pyx_k_main_thread), 0, 0, 1, 1},
  {0, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1},
  {0, __pyx_k_memoryview, sizeof(__pyx_k_memoryview), 0, 0, 1, 1},
  {0, __pyx_k_message_file, sizeof(__pyx_k_message_file), 0, 0, 1, 1},
  {0, __pyx_k_message_reader, sizeof(__pyx_k_message_reader), 0, 0, 1, 1},
  {0, __pyx_k_message_was_equal_to_the_record, sizeof(__pyx_k_message_was_equal_to_the_record), 0, 1, 0, 0},
  {0, __pyx_k_message_was_not_equal_to_the, sizeof(__pyx_k_message_was_not_equal_to_the), 0, 1, 0, 0},
  {0, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
  {0, __pyx_k_mm, sizeof(__pyx_k_mm), 0, 0, 1, 1},
  {0, __pyx_k_mmap, sizeof(__pyx_k_mmap), 0, 0, 1, 1},
  {0, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
  {0, __pyx_k_mountpoint, sizeof(__pyx_k_mountpoint), 0, 0, 1, 1},
  {0, __pyx_k_msg, sizeof(__pyx_k_msg), 0, 0, 1, 1},
  {0, __pyx_k_mv, sizeof(__pyx_k_mv), 0, 0, 1, 1},
  {0, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1},
  {0, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
  {0, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
  {0, __pyx_k_new_context, sizeof(__pyx_k_new_context), 0, 0, 1, 1},
  {0, __pyx_k_new_message, sizeof(__pyx_k_new_message), 0, 0, 1, 1},
  {0, __pyx_k_new_set, sizeof(__pyx_k_new_set), 0, 0, 1, 1},
  {0, __pyx_k_new_soft, sizeof(__pyx_k_new_soft), 0, 0, 1, 1},
  {0, __pyx_k_next_disabled_sigint, sizeof(__pyx_k_next_disabled_sigint), 0, 0, 1, 1},
  {0, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0},
  {0, __pyx_k_node, sizeof(__pyx_k_node), 0, 1, 0, 0},
  {0, __pyx_k_nodeIndex, sizeof(__pyx_k_nodeIndex), 0, 1, 0, 1},
  {0, __pyx_k_node_2, sizeof(__pyx_k_node_2), 0, 0, 1, 1},
  {0, __pyx_k_node_by_id, sizeof(__pyx_k_node_by_id), 0, 0, 1, 1},
  {0, __pyx_k_node_contents, sizeof(__pyx_k_node_contents), 0, 0, 1, 1},
  {0, __pyx_k_node_dependencies, sizeof(__pyx_k_node_dependencies), 0, 0, 1, 1},
  {0, __pyx_k_node_hash, sizeof(__pyx_k_node_hash), 0, 0, 1, 1},
  {0, __pyx_k_node_label, sizeof(__pyx_k_node_label), 0, 0, 1, 1},
  {0, __pyx_k_nodeid, sizeof(__pyx_k_nodeid), 0, 0, 1, 1},
  {0, __pyx_k_nodes, sizeof(__pyx_k_nodes), 0, 0, 1, 1},
  {0, __pyx_k_online_data_predict, sizeof(__pyx_k_online_data_predict), 0, 0, 1, 1},
  {0, __pyx_k_online_definitions_initialize, sizeof(__pyx_k_online_definitions_initialize), 0, 0, 1, 1},
  {0, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1},
  {0, __pyx_k_original, sizeof(__pyx_k_original), 0, 0, 1, 1},
  {0, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1},
  {0, __pyx_k_parent, sizeof(__pyx_k_parent), 0, 0, 1, 1},
  {0, __pyx_k_parts, sizeof(__pyx_k_parts), 0, 0, 1, 1},
  {0, __pyx_k_pathlib, sizeof(__pyx_k_pathlib), 0, 0, 1, 1},
  {0, __pyx_k_pg, sizeof(__pyx_k_pg), 0, 0, 1, 1},
  {0, __pyx_k_pred, sizeof(__pyx_k_pred), 0, 0, 1, 1},
  {0, __pyx_k_predict, sizeof(__pyx_k_predict), 0, 0, 1, 1},
  {0, __pyx_k_prediction, sizeof(__pyx_k_prediction), 0, 0, 1, 1},
  {0, __pyx_k_prediction_generator, sizeof(__pyx_k_prediction_generator), 0, 0, 1, 1},
  {0, __pyx_k_prediction_generator_locals_pred, sizeof(__pyx_k_prediction_generator_locals_pred), 0, 0, 1, 1},
  {0, __pyx_k_prediction_generator_sub, sizeof(__pyx_k_prediction_generator_sub), 0, 0, 1, 1},
  {0, __pyx_k_prediction_requests, sizeof(__pyx_k_prediction_requests), 0, 0, 1, 1},
  {0, __pyx_k_predictions, sizeof(__pyx_k_predictions), 0, 0, 1, 1},
  {0, __pyx_k_preds, sizeof(__pyx_k_preds), 0, 0, 1, 1},
  {0, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
  {0, __pyx_k_prev, sizeof(__pyx_k_prev), 0, 0, 1, 1},
  {0, __pyx_k_prev_sig, sizeof(__pyx_k_prev_sig), 0, 0, 1, 1},
  {0, __pyx_k_previous, sizeof(__pyx_k_previous), 0, 0, 1, 1},
  {0, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
  {0, __pyx_k_proof, sizeof(__pyx_k_proof), 0, 0, 1, 1},
  {0, __pyx_k_proof_state, sizeof(__pyx_k_proof_state), 0, 0, 1, 1},
  {0, __pyx_k_propagate, sizeof(__pyx_k_propagate), 0, 0, 1, 1},
  {0, __pyx_k_propagate_2, sizeof(__pyx_k_propagate_2), 0, 0, 1, 1},
  {0, __pyx_k_pytact, sizeof(__pyx_k_pytact), 0, 0, 1, 1},
  {0, __pyx_k_pytact_data_reader, sizeof(__pyx_k_pytact_data_reader), 0, 0, 1, 1},
  {0, __pyx_k_pytact_data_reader_pyx, sizeof(__pyx_k_pytact_data_reader_pyx), 0, 0, 1, 0},
  {0, __pyx_k_pytact_graph_api_capnp, sizeof(__pyx_k_pytact_graph_api_capnp), 0, 0, 1, 1},
  {0, __pyx_k_pytact_graph_api_capnp_cython, sizeof(__pyx_k_pytact_graph_api_capnp_cython), 0, 0, 1, 1},
  {0, __pyx_k_pytact_graph_api_capnp_cython_Ab, sizeof(__pyx_k_pytact_graph_api_capnp_cython_Ab), 0, 0, 1, 0},
  {0, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
  {0, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
  {0, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
  {0, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
  {0, __pyx_k_rb, sizeof(__pyx_k_rb), 0, 1, 0, 1},
  {0, __pyx_k_read_multiple_packed, sizeof(__pyx_k_read_multiple_packed), 0, 0, 1, 1},
  {0, __pyx_k_reader, sizeof(__pyx_k_reader), 0, 0, 1, 1},
  {0, __pyx_k_record, sizeof(__pyx_k_record), 0, 0, 1, 1},
  {0, __pyx_k_recorded_response, sizeof(__pyx_k_recorded_response), 0, 0, 1, 1},
  {0, __pyx_k_recorded_response_Recorded_respo, sizeof(__pyx_k_recorded_response_Recorded_respo), 0, 1, 0, 0},
  {0, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
  {0, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
  {0, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
  {0, __pyx_k_relative_to, sizeof(__pyx_k_relative_to), 0, 0, 1, 1},
  {0, __pyx_k_rep, sizeof(__pyx_k_rep), 0, 0, 1, 1},
  {0, __pyx_k_representative, sizeof(__pyx_k_representative), 0, 0, 1, 1},
  {0, __pyx_k_representatives, sizeof(__pyx_k_representatives), 0, 0, 1, 1},
  {0, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1},
  {0, __pyx_k_resource, sizeof(__pyx_k_resource), 0, 0, 1, 1},
  {0, __pyx_k_response, sizeof(__pyx_k_response), 0, 0, 1, 1},
  {0, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1},
  {0, __pyx_k_return, sizeof(__pyx_k_return), 0, 0, 1, 1},
  {0, __pyx_k_returncode, sizeof(__pyx_k_returncode), 0, 0, 1, 1},
  {0, __pyx_k_reversed, sizeof(__pyx_k_reversed), 0, 0, 1, 1},
  {0, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1},
  {0, __pyx_k_schema, sizeof(__pyx_k_schema), 0, 0, 1, 1},
  {0, __pyx_k_seen, sizeof(__pyx_k_seen), 0, 0, 1, 1},
  {0, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
  {0, __pyx_k_self_edges_self_graph_index_cann, sizeof(__pyx_k_self_edges_self_graph_index_cann), 0, 0, 1, 0},
  {0, __pyx_k_self_graph_index_cannot_be_conve, sizeof(__pyx_k_self_graph_index_cannot_be_conve), 0, 0, 1, 0},
  {0, __pyx_k_self_graph_index_self_node_canno, sizeof(__pyx_k_self_graph_index_self_node_canno), 0, 0, 1, 0},
  {0, __pyx_k_self_graph_index_self_reader_can, sizeof(__pyx_k_self_graph_index_self_reader_can), 0, 0, 1, 0},
  {0, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1},
  {0, __pyx_k_set, sizeof(__pyx_k_set), 0, 0, 1, 1},
  {0, __pyx_k_set_Definition, sizeof(__pyx_k_set_Definition), 0, 0, 1, 0},
  {0, __pyx_k_set_Definition_None, sizeof(__pyx_k_set_Definition_None), 0, 0, 1, 0},
  {0, __pyx_k_set_Node, sizeof(__pyx_k_set_Node), 0, 0, 1, 0},
  {0, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1},
  {0, __pyx_k_setrlimit, sizeof(__pyx_k_setrlimit), 0, 0, 1, 1},
  {0, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
  {0, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
  {0, __pyx_k_setup_dataset, sizeof(__pyx_k_setup_dataset), 0, 0, 1, 1},
  {0, __pyx_k_should_propagate, sizeof(__pyx_k_should_propagate), 0, 0, 1, 1},
  {0, __pyx_k_shutil, sizeof(__pyx_k_shutil), 0, 0, 1, 1},
  {0, __pyx_k_signal, sizeof(__pyx_k_signal), 0, 0, 1, 1},
  {0, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
  {0, __pyx_k_sleep, sizeof(__pyx_k_sleep), 0, 0, 1, 1},
  {0, __pyx_k_socket, sizeof(__pyx_k_socket), 0, 0, 1, 1},
  {0, __pyx_k_socket_socket, sizeof(__pyx_k_socket_socket), 0, 0, 1, 0},
  {0, __pyx_k_soft, sizeof(__pyx_k_soft), 0, 0, 1, 1},
  {0, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1},
  {0, __pyx_k_spine_only, sizeof(__pyx_k_spine_only), 0, 0, 1, 1},
  {0, __pyx_k_squashfuse, sizeof(__pyx_k_squashfuse), 0, 1, 0, 1},
  {0, __pyx_k_stack, sizeof(__pyx_k_stack), 0, 0, 1, 1},
  {0, __pyx_k_stack_size, sizeof(__pyx_k_stack_size), 0, 0, 1, 1},
  {0, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
  {0, __pyx_k_staticmethod, sizeof(__pyx_k_staticmethod), 0, 0, 1, 1},
  {0, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1},
  {0, __pyx_k_stdout, sizeof(__pyx_k_stdout), 0, 0, 1, 1},
  {0, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
  {0, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
  {0, __pyx_k_sub_context, sizeof(__pyx_k_sub_context), 0, 0, 1, 1},
  {0, __pyx_k_subprocess, sizeof(__pyx_k_subprocess), 0, 0, 1, 1},
  {0, __pyx_k_suggests_that_the_real_root_mig, sizeof(__pyx_k_suggests_that_the_real_root_mig), 0, 1, 0, 0},
  {0, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1},
  {0, __pyx_k_synchronize, sizeof(__pyx_k_synchronize), 0, 0, 1, 1},
  {0, __pyx_k_synchronized, sizeof(__pyx_k_synchronized), 0, 0, 1, 1},
  {0, __pyx_k_tactic, sizeof(__pyx_k_tactic), 0, 0, 1, 1},
  {0, __pyx_k_tactic, sizeof(__pyx_k_tactic), 0, 1, 0, 1},
  {0, __pyx_k_tacticText, sizeof(__pyx_k_tacticText), 0, 1, 0, 1},
  {0, __pyx_k_tactic_text, sizeof(__pyx_k_tactic_text), 0, 0, 1, 1},
  {0, __pyx_k_tactics, sizeof(__pyx_k_tactics), 0, 0, 1, 1},
  {0, __pyx_k_temp, sizeof(__pyx_k_temp), 0, 0, 1, 1},
  {0, __pyx_k_term, sizeof(__pyx_k_term), 0, 1, 0, 1},
  {0, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {0, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1},
  {0, __pyx_k_textPrediction, sizeof(__pyx_k_textPrediction), 0, 0, 1, 1},
  {0, __pyx_k_threading, sizeof(__pyx_k_threading), 0, 0, 1, 1},
  {0, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1},
  {0, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1},
  {0, __pyx_k_to_dict, sizeof(__pyx_k_to_dict), 0, 0, 1, 1},
  {0, __pyx_k_traversal_limit_in_words, sizeof(__pyx_k_traversal_limit_in_words), 0, 0, 1, 1},
  {0, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1},
  {0, __pyx_k_unalignedDefinitions, sizeof(__pyx_k_unalignedDefinitions), 0, 1, 0, 1},
  {0, __pyx_k_unalignedTactics, sizeof(__pyx_k_unalignedTactics), 0, 1, 0, 1},
  {0, __pyx_k_unknown_definitions, sizeof(__pyx_k_unknown_definitions), 0, 0, 1, 1},
  {0, __pyx_k_unknown_tactics, sizeof(__pyx_k_unknown_tactics), 0, 0, 1, 1},
  {0, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
  {0, __pyx_k_which, sizeof(__pyx_k_which), 0, 0, 1, 1},
  {0, __pyx_k_with_suffix, sizeof(__pyx_k_with_suffix), 0, 0, 1, 1},
  {0, __pyx_k_write_packed, sizeof(__pyx_k_write_packed), 0, 0, 1, 1},
  #else
  {&__pyx_n_s_ACCESS_READ, __pyx_k_ACCESS_READ, sizeof(__pyx_k_ACCESS_READ), 0, 0, 1, 1},
  {&__pyx_n_s_Any, __pyx_k_Any, sizeof(__pyx_k_Any), 0, 0, 1, 1},
  {&__pyx_n_s_Argument_List, __pyx_k_Argument_List, sizeof(__pyx_k_Argument_List), 0, 0, 1, 1},
  {&__pyx_n_s_Argument_List___reduce_cython, __pyx_k_Argument_List___reduce_cython, sizeof(__pyx_k_Argument_List___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Argument_List___setstate_cython, __pyx_k_Argument_List___setstate_cython, sizeof(__pyx_k_Argument_List___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1},
  {&__pyx_n_s_BinaryIO, __pyx_k_BinaryIO, sizeof(__pyx_k_BinaryIO), 0, 0, 1, 1},
  {&__pyx_kp_s_BinaryIO_None, __pyx_k_BinaryIO_None, sizeof(__pyx_k_BinaryIO_None), 0, 0, 1, 0},
  {&__pyx_n_s_Callable, __pyx_k_Callable, sizeof(__pyx_k_Callable), 0, 0, 1, 1},
  {&__pyx_kp_s_Callable_Definition_bool, __pyx_k_Callable_Definition_bool, sizeof(__pyx_k_Callable_Definition_bool), 0, 0, 1, 0},
  {&__pyx_kp_s_Callable_int_T, __pyx_k_Callable_int_T, sizeof(__pyx_k_Callable_int_T), 0, 0, 1, 0},
  {&__pyx_kp_u_Capnp_protocol_error, __pyx_k_Capnp_protocol_error, sizeof(__pyx_k_Capnp_protocol_error), 0, 1, 0, 0},
  {&__pyx_n_s_CheckAlignmentMessage, __pyx_k_CheckAlignmentMessage, sizeof(__pyx_k_CheckAlignmentMessage), 0, 0, 1, 1},
  {&__pyx_n_s_CheckAlignmentResponse, __pyx_k_CheckAlignmentResponse, sizeof(__pyx_k_CheckAlignmentResponse), 0, 0, 1, 1},
  {&__pyx_n_s_Constructor, __pyx_k_Constructor, sizeof(__pyx_k_Constructor), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset, __pyx_k_Dataset, sizeof(__pyx_k_Dataset), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset_Definition_List, __pyx_k_Dataset_Definition_List, sizeof(__pyx_k_Dataset_Definition_List), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset_Definition_List___reduce, __pyx_k_Dataset_Definition_List___reduce, sizeof(__pyx_k_Dataset_Definition_List___reduce), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset_Definition_List___setsta, __pyx_k_Dataset_Definition_List___setsta, sizeof(__pyx_k_Dataset_Definition_List___setsta), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset_Reader, __pyx_k_Dataset_Reader, sizeof(__pyx_k_Dataset_Reader), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset___get___locals_get, __pyx_k_Dataset___get___locals_get, sizeof(__pyx_k_Dataset___get___locals_get), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset___reduce_cython, __pyx_k_Dataset___reduce_cython, sizeof(__pyx_k_Dataset___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset___setstate_cython, __pyx_k_Dataset___setstate_cython, sizeof(__pyx_k_Dataset___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset_clustered_definitions, __pyx_k_Dataset_clustered_definitions, sizeof(__pyx_k_Dataset_clustered_definitions), 0, 0, 1, 1},
  {&__pyx_n_s_Dataset_definitions, __pyx_k_Dataset_definitions, sizeof(__pyx_k_Dataset_definitions), 0, 0, 1, 1},
  {&__pyx_kp_u_Dataset_does_not_exist, __pyx_k_Dataset_does_not_exist, sizeof(__pyx_k_Dataset_does_not_exist), 0, 1, 0, 0},
  {&__pyx_n_s_Dataset_node_by_id, __pyx_k_Dataset_node_by_id, sizeof(__pyx_k_Dataset_node_by_id), 0, 0, 1, 1},
  {&__pyx_n_s_Definition, __pyx_k_Definition, sizeof(__pyx_k_Definition), 0, 0, 1, 1},
  {&__pyx_n_s_Definition___get, __pyx_k_Definition___get, sizeof(__pyx_k_Definition___get), 0, 0, 1, 1},
  {&__pyx_n_s_Definition___reduce_cython, __pyx_k_Definition___reduce_cython, sizeof(__pyx_k_Definition___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Definition___setstate_cython, __pyx_k_Definition___setstate_cython, sizeof(__pyx_k_Definition___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Definition__global_context, __pyx_k_Definition__global_context, sizeof(__pyx_k_Definition__global_context), 0, 0, 1, 1},
  {&__pyx_n_s_Definition__group_by_clusters, __pyx_k_Definition__group_by_clusters, sizeof(__pyx_k_Definition__group_by_clusters), 0, 0, 1, 1},
  {&__pyx_n_s_Definition_clustered_global_cont, __pyx_k_Definition_clustered_global_cont, sizeof(__pyx_k_Definition_clustered_global_cont), 0, 0, 1, 1},
  {&__pyx_n_s_Definition_global_context, __pyx_k_Definition_global_context, sizeof(__pyx_k_Definition_global_context), 0, 0, 1, 1},
  {&__pyx_n_s_Discharged, __pyx_k_Discharged, sizeof(__pyx_k_Discharged), 0, 0, 1, 1},
  {&__pyx_n_s_EdgeTarget_List, __pyx_k_EdgeTarget_List, sizeof(__pyx_k_EdgeTarget_List), 0, 0, 1, 1},
  {&__pyx_n_s_EdgeTarget_List___reduce_cython, __pyx_k_EdgeTarget_List___reduce_cython, sizeof(__pyx_k_EdgeTarget_List___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_EdgeTarget_List___setstate_cytho, __pyx_k_EdgeTarget_List___setstate_cytho, sizeof(__pyx_k_EdgeTarget_List___setstate_cytho), 0, 0, 1, 1},
  {&__pyx_n_s_ExitStack, __pyx_k_ExitStack, sizeof(__pyx_k_ExitStack), 0, 0, 1, 1},
  {&__pyx_n_s_Generator, __pyx_k_Generator, sizeof(__pyx_k_Generator), 0, 0, 1, 1},
  {&__pyx_kp_s_Generator_Any_None_None, __pyx_k_Generator_Any_None_None, sizeof(__pyx_k_Generator_Any_None_None), 0, 0, 1, 0},
  {&__pyx_kp_s_Generator_GlobalContextMessage_P, __pyx_k_Generator_GlobalContextMessage_P, sizeof(__pyx_k_Generator_GlobalContextMessage_P), 0, 0, 1, 0},
  {&__pyx_kp_s_Generator_GlobalContextSets_None, __pyx_k_Generator_GlobalContextSets_None, sizeof(__pyx_k_Generator_GlobalContextSets_None), 0, 0, 1, 0},
  {&__pyx_kp_s_Generator_LowlevelDataReader_Non, __pyx_k_Generator_LowlevelDataReader_Non, sizeof(__pyx_k_Generator_LowlevelDataReader_Non), 0, 0, 1, 0},
  {&__pyx_kp_s_Generator_OnlineDefinitionsReade, __pyx_k_Generator_OnlineDefinitionsReade, sizeof(__pyx_k_Generator_OnlineDefinitionsReade), 0, 0, 1, 0},
  {&__pyx_kp_s_Generator_ProofState_None_None, __pyx_k_Generator_ProofState_None_None, sizeof(__pyx_k_Generator_ProofState_None_None), 0, 0, 1, 0},
  {&__pyx_kp_s_Generator_dict_Path_Dataset_None, __pyx_k_Generator_dict_Path_Dataset_None, sizeof(__pyx_k_Generator_dict_Path_Dataset_None), 0, 0, 1, 0},
  {&__pyx_kp_s_Generator_pytact_graph_api_capnp, __pyx_k_Generator_pytact_graph_api_capnp, sizeof(__pyx_k_Generator_pytact_graph_api_capnp), 0, 0, 1, 0},
  {&__pyx_n_s_GlobalContextMessage, __pyx_k_GlobalContextMessage, sizeof(__pyx_k_GlobalContextMessage), 0, 0, 1, 1},
  {&__pyx_n_s_GlobalContextSets, __pyx_k_GlobalContextSets, sizeof(__pyx_k_GlobalContextSets), 0, 0, 1, 1},
  {&__pyx_kp_s_GlobalContextSets_None, __pyx_k_GlobalContextSets_None, sizeof(__pyx_k_GlobalContextSets_None), 0, 0, 1, 0},
  {&__pyx_n_s_GlobalContextSets___init, __pyx_k_GlobalContextSets___init, sizeof(__pyx_k_GlobalContextSets___init), 0, 0, 1, 1},
  {&__pyx_n_s_GlobalContextSets__global_contex, __pyx_k_GlobalContextSets__global_contex, sizeof(__pyx_k_GlobalContextSets__global_contex), 0, 0, 1, 1},
  {&__pyx_n_s_GlobalContextSets__propagate, __pyx_k_GlobalContextSets__propagate, sizeof(__pyx_k_GlobalContextSets__propagate), 0, 0, 1, 1},
  {&__pyx_n_s_GlobalContextSets_global_context, __pyx_k_GlobalContextSets_global_context, sizeof(__pyx_k_GlobalContextSets_global_context), 0, 0, 1, 1},
  {&__pyx_n_s_GlobalContextSets_new_context, __pyx_k_GlobalContextSets_new_context, sizeof(__pyx_k_GlobalContextSets_new_context), 0, 0, 1, 1},
  {&__pyx_n_s_GlobalContextSets_new_context_lo, __pyx_k_GlobalContextSets_new_context_lo, sizeof(__pyx_k_GlobalContextSets_new_context_lo), 0, 0, 1, 1},
  {&__pyx_n_s_GlobalContextSets_sub_context, __pyx_k_GlobalContextSets_sub_context, sizeof(__pyx_k_GlobalContextSets_sub_context), 0, 0, 1, 1},
  {&__pyx_kp_u_Incorrect_predictions_received, __pyx_k_Incorrect_predictions_received, sizeof(__pyx_k_Incorrect_predictions_received), 0, 1, 0, 0},
  {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
  {&__pyx_n_s_Inductive, __pyx_k_Inductive, sizeof(__pyx_k_Inductive), 0, 0, 1, 1},
  {&__pyx_n_s_Iterable, __pyx_k_Iterable, sizeof(__pyx_k_Iterable), 0, 0, 1, 1},
  {&__pyx_kp_s_Iterable_Definition, __pyx_k_Iterable_Definition, sizeof(__pyx_k_Iterable_Definition), 0, 0, 1, 0},
  {&__pyx_kp_s_Iterable_list_Definition, __pyx_k_Iterable_list_Definition, sizeof(__pyx_k_Iterable_list_Definition), 0, 0, 1, 0},
  {&__pyx_n_s_KeyError, __pyx_k_KeyError, sizeof(__pyx_k_KeyError), 0, 0, 1, 1},
  {&__pyx_kp_s_Lazily_retrieve_a_the_global_con, __pyx_k_Lazily_retrieve_a_the_global_con, sizeof(__pyx_k_Lazily_retrieve_a_the_global_con), 0, 0, 1, 0},
  {&__pyx_n_s_LowlevelDataReader, __pyx_k_LowlevelDataReader, sizeof(__pyx_k_LowlevelDataReader), 0, 0, 1, 1},
  {&__pyx_n_s_LowlevelDataReader___reduce_cyth, __pyx_k_LowlevelDataReader___reduce_cyth, sizeof(__pyx_k_LowlevelDataReader___reduce_cyth), 0, 0, 1, 1},
  {&__pyx_n_s_LowlevelDataReader___setstate_cy, __pyx_k_LowlevelDataReader___setstate_cy, sizeof(__pyx_k_LowlevelDataReader___setstate_cy), 0, 0, 1, 1},
  {&__pyx_n_s_LowlevelDataReader_local_to_glob, __pyx_k_LowlevelDataReader_local_to_glob, sizeof(__pyx_k_LowlevelDataReader_local_to_glob), 0, 0, 1, 1},
  {&__pyx_n_s_ManualConstant, __pyx_k_ManualConstant, sizeof(__pyx_k_ManualConstant), 0, 0, 1, 1},
  {&__pyx_n_s_ManualSectionConstant, __pyx_k_ManualSectionConstant, sizeof(__pyx_k_ManualSectionConstant), 0, 0, 1, 1},
  {&__pyx_n_s_Map, __pyx_k_Map, sizeof(__pyx_k_Map), 0, 0, 1, 1},
  {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
  {&__pyx_kp_u_Mount_did_not_appear, __pyx_k_Mount_did_not_appear, sizeof(__pyx_k_Mount_did_not_appear), 0, 1, 0, 0},
  {&__pyx_n_s_Node, __pyx_k_Node, sizeof(__pyx_k_Node), 0, 0, 1, 1},
  {&__pyx_n_s_NodeHash, __pyx_k_NodeHash, sizeof(__pyx_k_NodeHash), 0, 0, 1, 1},
  {&__pyx_n_s_NodeId, __pyx_k_NodeId, sizeof(__pyx_k_NodeId), 0, 0, 1, 1},
  {&__pyx_n_s_Node_List, __pyx_k_Node_List, sizeof(__pyx_k_Node_List), 0, 0, 1, 1},
  {&__pyx_n_s_Node_List___reduce_cython, __pyx_k_Node_List___reduce_cython, sizeof(__pyx_k_Node_List___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Node_List___setstate_cython, __pyx_k_Node_List___setstate_cython, sizeof(__pyx_k_Node_List___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Node___reduce_cython, __pyx_k_Node___reduce_cython, sizeof(__pyx_k_Node___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Node___setstate_cython, __pyx_k_Node___setstate_cython, sizeof(__pyx_k_Node___setstate_cython), 0, 0, 1, 1},
  {&__pyx_kp_u_Not_all_prediction_requests_were, __pyx_k_Not_all_prediction_requests_were, sizeof(__pyx_k_Not_all_prediction_requests_were), 0, 1, 0, 0},
  {&__pyx_n_s_OnlineDefinitionsReader, __pyx_k_OnlineDefinitionsReader, sizeof(__pyx_k_OnlineDefinitionsReader), 0, 0, 1, 1},
  {&__pyx_n_s_OnlineDefinitionsReader___reduce, __pyx_k_OnlineDefinitionsReader___reduce, sizeof(__pyx_k_OnlineDefinitionsReader___reduce), 0, 0, 1, 1},
  {&__pyx_n_s_OnlineDefinitionsReader___setsta, __pyx_k_OnlineDefinitionsReader___setsta, sizeof(__pyx_k_OnlineDefinitionsReader___setsta), 0, 0, 1, 1},
  {&__pyx_n_s_OnlineDefinitionsReader_clustere, __pyx_k_OnlineDefinitionsReader_clustere, sizeof(__pyx_k_OnlineDefinitionsReader_clustere), 0, 0, 1, 1},
  {&__pyx_n_s_OnlineDefinitionsReader_definiti, __pyx_k_OnlineDefinitionsReader_definiti, sizeof(__pyx_k_OnlineDefinitionsReader_definiti), 0, 0, 1, 1},
  {&__pyx_n_s_OnlineDefinitionsReader_local_to, __pyx_k_OnlineDefinitionsReader_local_to, sizeof(__pyx_k_OnlineDefinitionsReader_local_to), 0, 0, 1, 1},
  {&__pyx_kp_u_Options_across_files_True_and_sp, __pyx_k_Options_across_files_True_and_sp, sizeof(__pyx_k_Options_across_files_True_and_sp), 0, 1, 0, 0},
  {&__pyx_n_s_Original, __pyx_k_Original, sizeof(__pyx_k_Original), 0, 0, 1, 1},
  {&__pyx_kp_u_Out_of_bounds, __pyx_k_Out_of_bounds, sizeof(__pyx_k_Out_of_bounds), 0, 1, 0, 0},
  {&__pyx_n_s_Outcome, __pyx_k_Outcome, sizeof(__pyx_k_Outcome), 0, 0, 1, 1},
  {&__pyx_n_s_Outcome_List, __pyx_k_Outcome_List, sizeof(__pyx_k_Outcome_List), 0, 0, 1, 1},
  {&__pyx_n_s_Outcome_List___reduce_cython, __pyx_k_Outcome_List___reduce_cython, sizeof(__pyx_k_Outcome_List___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Outcome_List___setstate_cython, __pyx_k_Outcome_List___setstate_cython, sizeof(__pyx_k_Outcome_List___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Outcome___reduce_cython, __pyx_k_Outcome___reduce_cython, sizeof(__pyx_k_Outcome___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_Outcome___setstate_cython, __pyx_k_Outcome___setstate_cython, sizeof(__pyx_k_Outcome___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_PIPE, __pyx_k_PIPE, sizeof(__pyx_k_PIPE), 0, 0, 1, 1},
  {&__pyx_n_s_Path, __pyx_k_Path, sizeof(__pyx_k_Path), 0, 0, 1, 1},
  {&__pyx_kp_u_Path_2, __pyx_k_Path_2, sizeof(__pyx_k_Path_2), 0, 1, 0, 0},
  {&__pyx_n_s_PredictionProtocol, __pyx_k_PredictionProtocol, sizeof(__pyx_k_PredictionProtocol), 0, 0, 1, 1},
  {&__pyx_n_s_Projection, __pyx_k_Projection, sizeof(__pyx_k_Projection), 0, 0, 1, 1},
  {&__pyx_n_s_ProofState, __pyx_k_ProofState, sizeof(__pyx_k_ProofState), 0, 0, 1, 1},
  {&__pyx_n_s_ProofStateId, __pyx_k_ProofStateId, sizeof(__pyx_k_ProofStateId), 0, 0, 1, 1},
  {&__pyx_n_s_ProofState_List, __pyx_k_ProofState_List, sizeof(__pyx_k_ProofState_List), 0, 0, 1, 1},
  {&__pyx_n_s_ProofState_List___reduce_cython, __pyx_k_ProofState_List___reduce_cython, sizeof(__pyx_k_ProofState_List___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_ProofState_List___setstate_cytho, __pyx_k_ProofState_List___setstate_cytho, sizeof(__pyx_k_ProofState_List___setstate_cytho), 0, 0, 1, 1},
  {&__pyx_n_s_ProofState___reduce_cython, __pyx_k_ProofState___reduce_cython, sizeof(__pyx_k_ProofState___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_ProofState___setstate_cython, __pyx_k_ProofState___setstate_cython, sizeof(__pyx_k_ProofState___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_ProofStep, __pyx_k_ProofStep, sizeof(__pyx_k_ProofStep), 0, 0, 1, 1},
  {&__pyx_n_s_ProofStep_List, __pyx_k_ProofStep_List, sizeof(__pyx_k_ProofStep_List), 0, 0, 1, 1},
  {&__pyx_n_s_ProofStep_List___reduce_cython, __pyx_k_ProofStep_List___reduce_cython, sizeof(__pyx_k_ProofStep_List___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_ProofStep_List___setstate_cython, __pyx_k_ProofStep_List___setstate_cython, sizeof(__pyx_k_ProofStep_List___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_ProofStep___reduce_cython, __pyx_k_ProofStep___reduce_cython, sizeof(__pyx_k_ProofStep___reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_ProofStep___setstate_cython, __pyx_k_ProofStep___setstate_cython, sizeof(__pyx_k_ProofStep___setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_RLIMIT_NOFILE, __pyx_k_RLIMIT_NOFILE, sizeof(__pyx_k_RLIMIT_NOFILE), 0, 0, 1, 1},
  {&__pyx_n_s_Representative_List, __pyx_k_Representative_List, sizeof(__pyx_k_Representative_List), 0, 0, 1, 1},
  {&__pyx_n_s_Representative_List___reduce_cyt, __pyx_k_Representative_List___reduce_cyt, sizeof(__pyx_k_Representative_List___reduce_cyt), 0, 0, 1, 1},
  {&__pyx_n_s_Representative_List___setstate_c, __pyx_k_Representative_List___setstate_c, sizeof(__pyx_k_Representative_List___setstate_c), 0, 0, 1, 1},
  {&__pyx_n_s_Request, __pyx_k_Request, sizeof(__pyx_k_Request), 0, 0, 1, 1},
  {&__pyx_n_s_Response, __pyx_k_Response, sizeof(__pyx_k_Response), 0, 0, 1, 1},
  {&__pyx_n_s_SIGINT, __pyx_k_SIGINT, sizeof(__pyx_k_SIGINT), 0, 0, 1, 1},
  {&__pyx_n_s_SIG_DFL, __pyx_k_SIG_DFL, sizeof(__pyx_k_SIG_DFL), 0, 0, 1, 1},
  {&__pyx_n_s_Sequence, __pyx_k_Sequence, sizeof(__pyx_k_Sequence), 0, 0, 1, 1},
  {&__pyx_kp_s_Sequence_ProofStep, __pyx_k_Sequence_ProofStep, sizeof(__pyx_k_Sequence_ProofStep), 0, 0, 1, 0},
  {&__pyx_kp_u_Servers_response, __pyx_k_Servers_response, sizeof(__pyx_k_Servers_response), 0, 1, 0, 0},
  {&__pyx_kp_u_Squashfuse_error, __pyx_k_Squashfuse_error, sizeof(__pyx_k_Squashfuse_error), 0, 1, 0, 0},
  {&__pyx_n_s_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 0, 0, 1, 1},
  {&__pyx_n_s_Substituted, __pyx_k_Substituted, sizeof(__pyx_k_Substituted), 0, 0, 1, 1},
  {&__pyx_n_s_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 0, 1, 1},
  {&__pyx_n_u_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 1, 0, 1},
  {&__pyx_n_s_TacticId, __pyx_k_TacticId, sizeof(__pyx_k_TacticId), 0, 0, 1, 1},
  {&__pyx_n_s_TacticPredictionGraph, __pyx_k_TacticPredictionGraph, sizeof(__pyx_k_TacticPredictionGraph), 0, 0, 1, 1},
  {&__pyx_n_s_TacticPredictionText, __pyx_k_TacticPredictionText, sizeof(__pyx_k_TacticPredictionText), 0, 0, 1, 1},
  {&__pyx_n_s_TacticPredictionsGraph, __pyx_k_TacticPredictionsGraph, sizeof(__pyx_k_TacticPredictionsGraph), 0, 0, 1, 1},
  {&__pyx_n_s_TacticPredictionsText, __pyx_k_TacticPredictionsText, sizeof(__pyx_k_TacticPredictionsText), 0, 0, 1, 1},
  {&__pyx_n_s_TacticalConstant, __pyx_k_TacticalConstant, sizeof(__pyx_k_TacticalConstant), 0, 0, 1, 1},
  {&__pyx_n_s_TacticalSectionConstant, __pyx_k_TacticalSectionConstant, sizeof(__pyx_k_TacticalSectionConstant), 0, 0, 1, 1},
  {&__pyx_kp_u_The_servers_response_to_a, __pyx_k_The_servers_response_to_a, sizeof(__pyx_k_The_servers_response_to_a), 0, 1, 0, 0},
  {&__pyx_kp_u_There_does_not_appear_to_be_a_da, __pyx_k_There_does_not_appear_to_be_a_da, sizeof(__pyx_k_There_does_not_appear_to_be_a_da), 0, 1, 0, 0},
  {&__pyx_kp_u_This_library_is_compiled_for_a_d, __pyx_k_This_library_is_compiled_for_a_d, sizeof(__pyx_k_This_library_is_compiled_for_a_d), 0, 1, 0, 0},
  {&__pyx_n_s_TupleLike, __pyx_k_TupleLike, sizeof(__pyx_k_TupleLike), 0, 0, 1, 1},
  {&__pyx_n_s_TupleLike___getitem, __pyx_k_TupleLike___getitem, sizeof(__pyx_k_TupleLike___getitem), 0, 0, 1, 1},
  {&__pyx_n_s_TupleLike___init, __pyx_k_TupleLike___init, sizeof(__pyx_k_TupleLike___init), 0, 0, 1, 1},
  {&__pyx_n_s_TupleLike___len, __pyx_k_TupleLike___len, sizeof(__pyx_k_TupleLike___len), 0, 0, 1, 1},
  {&__pyx_n_s_TypeAlias, __pyx_k_TypeAlias, sizeof(__pyx_k_TypeAlias), 0, 0, 1, 1},
  {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
  {&__pyx_n_s_TypeVar, __pyx_k_TypeVar, sizeof(__pyx_k_TypeVar), 0, 0, 1, 1},
  {&__pyx_kp_u_Unable_to_mount_dataset, __pyx_k_Unable_to_mount_dataset, sizeof(__pyx_k_Unable_to_mount_dataset), 0, 1, 0, 0},
  {&__pyx_kp_u_Unable_to_mount_dataset_Executab, __pyx_k_Unable_to_mount_dataset_Executab, sizeof(__pyx_k_Unable_to_mount_dataset_Executab), 0, 1, 0, 0},
  {&__pyx_kp_u_Unable_to_mount_dataset_Mountpoi, __pyx_k_Unable_to_mount_dataset_Mountpoi, sizeof(__pyx_k_Unable_to_mount_dataset_Mountpoi), 0, 1, 0, 0},
  {&__pyx_kp_u_Unable_to_mount_dataset_Squashfu, __pyx_k_Unable_to_mount_dataset_Squashfu, sizeof(__pyx_k_Unable_to_mount_dataset_Squashfu), 0, 1, 0, 0},
  {&__pyx_n_s_Union, __pyx_k_Union, sizeof(__pyx_k_Union), 0, 0, 1, 1},
  {&__pyx_n_s_Unknown, __pyx_k_Unknown, sizeof(__pyx_k_Unknown), 0, 0, 1, 1},
  {&__pyx_n_s_Unresolvable, __pyx_k_Unresolvable, sizeof(__pyx_k_Unresolvable), 0, 0, 1, 1},
  {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
  {&__pyx_kp_u__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 1, 0, 0},
  {&__pyx_n_s__134, __pyx_k__134, sizeof(__pyx_k__134), 0, 0, 1, 1},
  {&__pyx_kp_u__25, __pyx_k__25, sizeof(__pyx_k__25), 0, 1, 0, 0},
  {&__pyx_n_s__31, __pyx_k__31, sizeof(__pyx_k__31), 0, 0, 1, 1},
  {&__pyx_n_s__33, __pyx_k__33, sizeof(__pyx_k__33), 0, 0, 1, 1},
  {&__pyx_kp_u__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 1, 0, 0},
  {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0},
  {&__pyx_kp_u__8, __pyx_k__8, sizeof(__pyx_k__8), 0, 1, 0, 0},
  {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1},
  {&__pyx_n_s_access, __pyx_k_access, sizeof(__pyx_k_access), 0, 0, 1, 1},
  {&__pyx_n_s_across_files, __pyx_k_across_files, sizeof(__pyx_k_across_files), 0, 0, 1, 1},
  {&__pyx_n_s_add, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1},
  {&__pyx_n_s_alignment, __pyx_k_alignment, sizeof(__pyx_k_alignment), 0, 0, 1, 1},
  {&__pyx_n_s_annotations, __pyx_k_annotations, sizeof(__pyx_k_annotations), 0, 0, 1, 1},
  {&__pyx_n_s_apic, __pyx_k_apic, sizeof(__pyx_k_apic), 0, 0, 1, 1},
  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
  {&__pyx_n_s_arguments, __pyx_k_arguments, sizeof(__pyx_k_arguments), 0, 0, 1, 1},
  {&__pyx_n_u_arguments, __pyx_k_arguments, sizeof(__pyx_k_arguments), 0, 1, 0, 1},
  {&__pyx_n_s_as_builder, __pyx_k_as_builder, sizeof(__pyx_k_as_builder), 0, 0, 1, 1},
  {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1},
  {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1},
  {&__pyx_kp_u_bin, __pyx_k_bin, sizeof(__pyx_k_bin), 0, 1, 0, 0},
  {&__pyx_n_s_bool, __pyx_k_bool, sizeof(__pyx_k_bool), 0, 0, 1, 1},
  {&__pyx_kp_u_but_file, __pyx_k_but_file, sizeof(__pyx_k_but_file), 0, 1, 0, 0},
  {&__pyx_kp_u_but_file_Coq_sent_a_message_ver, __pyx_k_but_file_Coq_sent_a_message_ver, sizeof(__pyx_k_but_file_Coq_sent_a_message_ver), 0, 1, 0, 0},
  {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
  {&__pyx_n_s_cache, __pyx_k_cache, sizeof(__pyx_k_cache), 0, 0, 1, 1},
  {&__pyx_n_s_capnp, __pyx_k_capnp, sizeof(__pyx_k_capnp), 0, 0, 1, 1},
  {&__pyx_n_s_capnp_message_generator, __pyx_k_capnp_message_generator, sizeof(__pyx_k_capnp_message_generator), 0, 0, 1, 1},
  {&__pyx_n_s_capnp_message_generator_from_fil, __pyx_k_capnp_message_generator_from_fil, sizeof(__pyx_k_capnp_message_generator_from_fil), 0, 0, 1, 1},
  {&__pyx_n_s_capnp_message_generator_from_fil_2, __pyx_k_capnp_message_generator_from_fil_2, sizeof(__pyx_k_capnp_message_generator_from_fil_2), 0, 0, 1, 1},
  {&__pyx_n_s_capnp_message_generator_lowlevel, __pyx_k_capnp_message_generator_lowlevel, sizeof(__pyx_k_capnp_message_generator_lowlevel), 0, 0, 1, 1},
  {&__pyx_n_s_capnp_message_generator_lowlevel_2, __pyx_k_capnp_message_generator_lowlevel_2, sizeof(__pyx_k_capnp_message_generator_lowlevel_2), 0, 0, 1, 1},
  {&__pyx_n_s_cast, __pyx_k_cast, sizeof(__pyx_k_cast), 0, 0, 1, 1},
  {&__pyx_n_s_check, __pyx_k_check, sizeof(__pyx_k_check), 0, 0, 1, 1},
  {&__pyx_n_s_child, __pyx_k_child, sizeof(__pyx_k_child), 0, 0, 1, 1},
  {&__pyx_n_s_child_graph, __pyx_k_child_graph, sizeof(__pyx_k_child_graph), 0, 0, 1, 1},
  {&__pyx_n_s_children, __pyx_k_children, sizeof(__pyx_k_children), 0, 0, 1, 1},
  {&__pyx_n_s_children_index, __pyx_k_children_index, sizeof(__pyx_k_children_index), 0, 0, 1, 1},
  {&__pyx_n_s_children_limit, __pyx_k_children_limit, sizeof(__pyx_k_children_limit), 0, 0, 1, 1},
  {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 0, 0, 1, 1},
  {&__pyx_n_s_clear_write_flag, __pyx_k_clear_write_flag, sizeof(__pyx_k_clear_write_flag), 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_cluster, __pyx_k_cluster, sizeof(__pyx_k_cluster), 0, 0, 1, 1},
  {&__pyx_n_s_cluster_representative, __pyx_k_cluster_representative, sizeof(__pyx_k_cluster_representative), 0, 0, 1, 1},
  {&__pyx_n_s_clustered_definitions, __pyx_k_clustered_definitions, sizeof(__pyx_k_clustered_definitions), 0, 0, 1, 1},
  {&__pyx_n_s_clustered_global_context, __pyx_k_clustered_global_context, sizeof(__pyx_k_clustered_global_context), 0, 0, 1, 1},
  {&__pyx_n_s_collections_abc, __pyx_k_collections_abc, sizeof(__pyx_k_collections_abc), 0, 0, 1, 1},
  {&__pyx_n_s_confidence, __pyx_k_confidence, sizeof(__pyx_k_confidence), 0, 0, 1, 1},
  {&__pyx_n_u_confidence, __pyx_k_confidence, sizeof(__pyx_k_confidence), 0, 1, 0, 1},
  {&__pyx_kp_u_contains_data_versioned_as, __pyx_k_contains_data_versioned_as, sizeof(__pyx_k_contains_data_versioned_as), 0, 1, 0, 0},
  {&__pyx_n_s_context, __pyx_k_context, sizeof(__pyx_k_context), 0, 0, 1, 1},
  {&__pyx_n_s_contextlib, __pyx_k_contextlib, sizeof(__pyx_k_contextlib), 0, 0, 1, 1},
  {&__pyx_n_s_contextmanager, __pyx_k_contextmanager, sizeof(__pyx_k_contextmanager), 0, 0, 1, 1},
  {&__pyx_n_s_convert_predictions, __pyx_k_convert_predictions, sizeof(__pyx_k_convert_predictions), 0, 0, 1, 1},
  {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
  {&__pyx_n_s_count_2, __pyx_k_count_2, sizeof(__pyx_k_count_2), 0, 0, 1, 1},
  {&__pyx_n_s_create_mmap, __pyx_k_create_mmap, sizeof(__pyx_k_create_mmap), 0, 0, 1, 1},
  {&__pyx_n_s_currentVersion, __pyx_k_currentVersion, sizeof(__pyx_k_currentVersion), 0, 0, 1, 1},
  {&__pyx_n_s_current_node, __pyx_k_current_node, sizeof(__pyx_k_current_node), 0, 0, 1, 1},
  {&__pyx_n_s_current_thread, __pyx_k_current_thread, sizeof(__pyx_k_current_thread), 0, 0, 1, 1},
  {&__pyx_n_s_cython_msg, __pyx_k_cython_msg, sizeof(__pyx_k_cython_msg), 0, 0, 1, 1},
  {&__pyx_n_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1},
  {&__pyx_n_s_data_reader, __pyx_k_data_reader, sizeof(__pyx_k_data_reader), 0, 0, 1, 1},
  {&__pyx_n_s_data_version, __pyx_k_data_version, sizeof(__pyx_k_data_version), 0, 0, 1, 1},
  {&__pyx_n_s_dataclass, __pyx_k_dataclass, sizeof(__pyx_k_dataclass), 0, 0, 1, 1},
  {&__pyx_n_s_dataclasses, __pyx_k_dataclasses, sizeof(__pyx_k_dataclasses), 0, 0, 1, 1},
  {&__pyx_n_s_dataset, __pyx_k_dataset, sizeof(__pyx_k_dataset), 0, 0, 1, 1},
  {&__pyx_n_s_dataset_path, __pyx_k_dataset_path, sizeof(__pyx_k_dataset_path), 0, 0, 1, 1},
  {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1},
  {&__pyx_n_s_definition, __pyx_k_definition, sizeof(__pyx_k_definition), 0, 0, 1, 1},
  {&__pyx_n_s_definition_dependencies, __pyx_k_definition_dependencies, sizeof(__pyx_k_definition_dependencies), 0, 0, 1, 1},
  {&__pyx_n_s_definitions, __pyx_k_definitions, sizeof(__pyx_k_definitions), 0, 0, 1, 1},
  {&__pyx_n_s_definitions_it, __pyx_k_definitions_it, sizeof(__pyx_k_definitions_it), 0, 0, 1, 1},
  {&__pyx_n_s_defs, __pyx_k_defs, sizeof(__pyx_k_defs), 0, 0, 1, 1},
  {&__pyx_n_u_depIndex, __pyx_k_depIndex, sizeof(__pyx_k_depIndex), 0, 1, 0, 1},
  {&__pyx_n_s_dep_index, __pyx_k_dep_index, sizeof(__pyx_k_dep_index), 0, 0, 1, 1},
  {&__pyx_n_s_dependencies, __pyx_k_dependencies, sizeof(__pyx_k_dependencies), 0, 0, 1, 1},
  {&__pyx_n_s_deps, __pyx_k_deps, sizeof(__pyx_k_deps), 0, 0, 1, 1},
  {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
  {&__pyx_kp_s_dict_Path_Dataset, __pyx_k_dict_Path_Dataset, sizeof(__pyx_k_dict_Path_Dataset), 0, 0, 1, 0},
  {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0},
  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
  {&__pyx_kp_u_doesn_t_appear_to_be_the_root_o, __pyx_k_doesn_t_appear_to_be_the_root_o, sizeof(__pyx_k_doesn_t_appear_to_be_the_root_o), 0, 1, 0, 0},
  {&__pyx_n_s_dr, __pyx_k_dr, sizeof(__pyx_k_dr), 0, 0, 1, 1},
  {&__pyx_n_s_edge_target, __pyx_k_edge_target, sizeof(__pyx_k_edge_target), 0, 0, 1, 1},
  {&__pyx_n_s_edges, __pyx_k_edges, sizeof(__pyx_k_edges), 0, 0, 1, 1},
  {&__pyx_n_s_empty_online_definitions_initial, __pyx_k_empty_online_definitions_initial, sizeof(__pyx_k_empty_online_definitions_initial), 0, 0, 1, 1},
  {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0},
  {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1},
  {&__pyx_n_s_enter_context, __pyx_k_enter_context, sizeof(__pyx_k_enter_context), 0, 0, 1, 1},
  {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1},
  {&__pyx_n_s_ep, __pyx_k_ep, sizeof(__pyx_k_ep), 0, 0, 1, 1},
  {&__pyx_n_s_eprev, __pyx_k_eprev, sizeof(__pyx_k_eprev), 0, 0, 1, 1},
  {&__pyx_n_s_exists, __pyx_k_exists, sizeof(__pyx_k_exists), 0, 0, 1, 1},
  {&__pyx_n_s_exit, __pyx_k_exit, sizeof(__pyx_k_exit), 0, 0, 1, 1},
  {&__pyx_n_s_external_previous, __pyx_k_external_previous, sizeof(__pyx_k_external_previous), 0, 0, 1, 1},
  {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
  {&__pyx_n_s_file_dataset_reader, __pyx_k_file_dataset_reader, sizeof(__pyx_k_file_dataset_reader), 0, 0, 1, 1},
  {&__pyx_n_s_file_dataset_reader_locals_creat, __pyx_k_file_dataset_reader_locals_creat, sizeof(__pyx_k_file_dataset_reader_locals_creat), 0, 0, 1, 1},
  {&__pyx_n_s_fileno, __pyx_k_fileno, sizeof(__pyx_k_fileno), 0, 0, 1, 1},
  {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1},
  {&__pyx_n_s_fname, __pyx_k_fname, sizeof(__pyx_k_fname), 0, 0, 1, 1},
  {&__pyx_n_s_fnames, __pyx_k_fnames, sizeof(__pyx_k_fnames), 0, 0, 1, 1},
  {&__pyx_n_s_from_bytes, __pyx_k_from_bytes, sizeof(__pyx_k_from_bytes), 0, 0, 1, 1},
  {&__pyx_n_s_full, __pyx_k_full, sizeof(__pyx_k_full), 0, 0, 1, 1},
  {&__pyx_n_s_g, __pyx_k_g, sizeof(__pyx_k_g), 0, 0, 1, 1},
  {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0},
  {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
  {&__pyx_n_s_get_2, __pyx_k_get_2, sizeof(__pyx_k_get_2), 0, 0, 1, 1},
  {&__pyx_n_s_getitem, __pyx_k_getitem, sizeof(__pyx_k_getitem), 0, 0, 1, 1},
  {&__pyx_n_s_getrlimit, __pyx_k_getrlimit, sizeof(__pyx_k_getrlimit), 0, 0, 1, 1},
  {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
  {&__pyx_n_s_glob, __pyx_k_glob, sizeof(__pyx_k_glob), 0, 0, 1, 1},
  {&__pyx_n_s_global_context, __pyx_k_global_context, sizeof(__pyx_k_global_context), 0, 0, 1, 1},
  {&__pyx_n_s_global_context_2, __pyx_k_global_context_2, sizeof(__pyx_k_global_context_2), 0, 0, 1, 1},
  {&__pyx_n_s_global_context_set, __pyx_k_global_context_set, sizeof(__pyx_k_global_context_set), 0, 0, 1, 1},
  {&__pyx_n_s_global_context_set_2, __pyx_k_global_context_set_2, sizeof(__pyx_k_global_context_set_2), 0, 0, 1, 1},
  {&__pyx_n_s_graph, __pyx_k_graph, sizeof(__pyx_k_graph), 0, 0, 1, 1},
  {&__pyx_n_s_graph_api_capnp, __pyx_k_graph_api_capnp, sizeof(__pyx_k_graph_api_capnp), 0, 0, 1, 1},
  {&__pyx_n_s_graph_api_capnp_cython, __pyx_k_graph_api_capnp_cython, sizeof(__pyx_k_graph_api_capnp_cython), 0, 0, 1, 1},
  {&__pyx_n_s_graph_index, __pyx_k_graph_index, sizeof(__pyx_k_graph_index), 0, 0, 1, 1},
  {&__pyx_n_s_graphid, __pyx_k_graphid, sizeof(__pyx_k_graphid), 0, 0, 1, 1},
  {&__pyx_n_s_group_by_clusters, __pyx_k_group_by_clusters, sizeof(__pyx_k_group_by_clusters), 0, 0, 1, 1},
  {&__pyx_n_s_hard, __pyx_k_hard, sizeof(__pyx_k_hard), 0, 0, 1, 1},
  {&__pyx_n_s_ident, __pyx_k_ident, sizeof(__pyx_k_ident), 0, 0, 1, 1},
  {&__pyx_n_u_ident, __pyx_k_ident, sizeof(__pyx_k_ident), 0, 1, 0, 1},
  {&__pyx_n_s_immutables, __pyx_k_immutables, sizeof(__pyx_k_immutables), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_n_s_inclusive, __pyx_k_inclusive, sizeof(__pyx_k_inclusive), 0, 0, 1, 1},
  {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1},
  {&__pyx_n_s_index_getter, __pyx_k_index_getter, sizeof(__pyx_k_index_getter), 0, 0, 1, 1},
  {&__pyx_n_s_index_getter_2, __pyx_k_index_getter_2, sizeof(__pyx_k_index_getter_2), 0, 0, 1, 1},
  {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
  {&__pyx_n_s_init_2, __pyx_k_init_2, sizeof(__pyx_k_init_2), 0, 0, 1, 1},
  {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1},
  {&__pyx_n_s_initialize, __pyx_k_initialize, sizeof(__pyx_k_initialize), 0, 0, 1, 1},
  {&__pyx_n_s_initialized, __pyx_k_initialized, sizeof(__pyx_k_initialized), 0, 0, 1, 1},
  {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1},
  {&__pyx_n_s_int, __pyx_k_int, sizeof(__pyx_k_int), 0, 0, 1, 1},
  {&__pyx_n_s_is_check_alignment, __pyx_k_is_check_alignment, sizeof(__pyx_k_is_check_alignment), 0, 0, 1, 1},
  {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1},
  {&__pyx_n_s_is_dir, __pyx_k_is_dir, sizeof(__pyx_k_is_dir), 0, 0, 1, 1},
  {&__pyx_n_s_is_file, __pyx_k_is_file, sizeof(__pyx_k_is_file), 0, 0, 1, 1},
  {&__pyx_n_s_is_initialize, __pyx_k_is_initialize, sizeof(__pyx_k_is_initialize), 0, 0, 1, 1},
  {&__pyx_n_s_is_mount, __pyx_k_is_mount, sizeof(__pyx_k_is_mount), 0, 0, 1, 1},
  {&__pyx_n_s_is_predict, __pyx_k_is_predict, sizeof(__pyx_k_is_predict), 0, 0, 1, 1},
  {&__pyx_n_s_is_synchronize, __pyx_k_is_synchronize, sizeof(__pyx_k_is_synchronize), 0, 0, 1, 1},
  {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0},
  {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1},
  {&__pyx_n_s_itertools, __pyx_k_itertools, sizeof(__pyx_k_itertools), 0, 0, 1, 1},
  {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1},
  {&__pyx_n_s_len, __pyx_k_len, sizeof(__pyx_k_len), 0, 0, 1, 1},
  {&__pyx_n_s_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1},
  {&__pyx_n_s_lgenerator, __pyx_k_lgenerator, sizeof(__pyx_k_lgenerator), 0, 0, 1, 1},
  {&__pyx_kp_s_list_Definition, __pyx_k_list_Definition, sizeof(__pyx_k_list_Definition), 0, 0, 1, 0},
  {&__pyx_kp_s_list_Node, __pyx_k_list_Node, sizeof(__pyx_k_list_Node), 0, 0, 1, 0},
  {&__pyx_kp_s_list_TacticPredictionsGraph, __pyx_k_list_TacticPredictionsGraph, sizeof(__pyx_k_list_TacticPredictionsGraph), 0, 0, 1, 0},
  {&__pyx_kp_s_list_TacticPredictionsText, __pyx_k_list_TacticPredictionsText, sizeof(__pyx_k_list_TacticPredictionsText), 0, 0, 1, 0},
  {&__pyx_kp_s_list_int, __pyx_k_list_int, sizeof(__pyx_k_list_int), 0, 0, 1, 0},
  {&__pyx_n_s_local_to_global, __pyx_k_local_to_global, sizeof(__pyx_k_local_to_global), 0, 0, 1, 1},
  {&__pyx_n_s_log_annotation, __pyx_k_log_annotation, sizeof(__pyx_k_log_annotation), 0, 0, 1, 1},
  {&__pyx_n_s_lowlevel, __pyx_k_lowlevel, sizeof(__pyx_k_lowlevel), 0, 0, 1, 1},
  {&__pyx_n_s_lowlevel_data_reader, __pyx_k_lowlevel_data_reader, sizeof(__pyx_k_lowlevel_data_reader), 0, 0, 1, 1},
  {&__pyx_n_s_lowlevel_to_highlevel, __pyx_k_lowlevel_to_highlevel, sizeof(__pyx_k_lowlevel_to_highlevel), 0, 0, 1, 1},
  {&__pyx_n_s_lreader, __pyx_k_lreader, sizeof(__pyx_k_lreader), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_main_thread, __pyx_k_main_thread, sizeof(__pyx_k_main_thread), 0, 0, 1, 1},
  {&__pyx_n_s_major, __pyx_k_major, sizeof(__pyx_k_major), 0, 0, 1, 1},
  {&__pyx_n_s_memoryview, __pyx_k_memoryview, sizeof(__pyx_k_memoryview), 0, 0, 1, 1},
  {&__pyx_n_s_message_file, __pyx_k_message_file, sizeof(__pyx_k_message_file), 0, 0, 1, 1},
  {&__pyx_n_s_message_reader, __pyx_k_message_reader, sizeof(__pyx_k_message_reader), 0, 0, 1, 1},
  {&__pyx_kp_u_message_was_equal_to_the_record, __pyx_k_message_was_equal_to_the_record, sizeof(__pyx_k_message_was_equal_to_the_record), 0, 1, 0, 0},
  {&__pyx_kp_u_message_was_not_equal_to_the, __pyx_k_message_was_not_equal_to_the, sizeof(__pyx_k_message_was_not_equal_to_the), 0, 1, 0, 0},
  {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
  {&__pyx_n_s_mm, __pyx_k_mm, sizeof(__pyx_k_mm), 0, 0, 1, 1},
  {&__pyx_n_s_mmap, __pyx_k_mmap, sizeof(__pyx_k_mmap), 0, 0, 1, 1},
  {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
  {&__pyx_n_s_mountpoint, __pyx_k_mountpoint, sizeof(__pyx_k_mountpoint), 0, 0, 1, 1},
  {&__pyx_n_s_msg, __pyx_k_msg, sizeof(__pyx_k_msg), 0, 0, 1, 1},
  {&__pyx_n_s_mv, __pyx_k_mv, sizeof(__pyx_k_mv), 0, 0, 1, 1},
  {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1},
  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
  {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
  {&__pyx_n_s_new_context, __pyx_k_new_context, sizeof(__pyx_k_new_context), 0, 0, 1, 1},
  {&__pyx_n_s_new_message, __pyx_k_new_message, sizeof(__pyx_k_new_message), 0, 0, 1, 1},
  {&__pyx_n_s_new_set, __pyx_k_new_set, sizeof(__pyx_k_new_set), 0, 0, 1, 1},
  {&__pyx_n_s_new_soft, __pyx_k_new_soft, sizeof(__pyx_k_new_soft), 0, 0, 1, 1},
  {&__pyx_n_s_next_disabled_sigint, __pyx_k_next_disabled_sigint, sizeof(__pyx_k_next_disabled_sigint), 0, 0, 1, 1},
  {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0},
  {&__pyx_kp_u_node, __pyx_k_node, sizeof(__pyx_k_node), 0, 1, 0, 0},
  {&__pyx_n_u_nodeIndex, __pyx_k_nodeIndex, sizeof(__pyx_k_nodeIndex), 0, 1, 0, 1},
  {&__pyx_n_s_node_2, __pyx_k_node_2, sizeof(__pyx_k_node_2), 0, 0, 1, 1},
  {&__pyx_n_s_node_by_id, __pyx_k_node_by_id, sizeof(__pyx_k_node_by_id), 0, 0, 1, 1},
  {&__pyx_n_s_node_contents, __pyx_k_node_contents, sizeof(__pyx_k_node_contents), 0, 0, 1, 1},
  {&__pyx_n_s_node_dependencies, __pyx_k_node_dependencies, sizeof(__pyx_k_node_dependencies), 0, 0, 1, 1},
  {&__pyx_n_s_node_hash, __pyx_k_node_hash, sizeof(__pyx_k_node_hash), 0, 0, 1, 1},
  {&__pyx_n_s_node_label, __pyx_k_node_label, sizeof(__pyx_k_node_label), 0, 0, 1, 1},
  {&__pyx_n_s_nodeid, __pyx_k_nodeid, sizeof(__pyx_k_nodeid), 0, 0, 1, 1},
  {&__pyx_n_s_nodes, __pyx_k_nodes, sizeof(__pyx_k_nodes), 0, 0, 1, 1},
  {&__pyx_n_s_online_data_predict, __pyx_k_online_data_predict, sizeof(__pyx_k_online_data_predict), 0, 0, 1, 1},
  {&__pyx_n_s_online_definitions_initialize, __pyx_k_online_definitions_initialize, sizeof(__pyx_k_online_definitions_initialize), 0, 0, 1, 1},
  {&__pyx_n_s_open, __pyx_k_open, sizeof(__pyx_k_open), 0, 0, 1, 1},
  {&__pyx_n_s_original, __pyx_k_original, sizeof(__pyx_k_original), 0, 0, 1, 1},
  {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1},
  {&__pyx_n_s_parent, __pyx_k_parent, sizeof(__pyx_k_parent), 0, 0, 1, 1},
  {&__pyx_n_s_parts, __pyx_k_parts, sizeof(__pyx_k_parts), 0, 0, 1, 1},
  {&__pyx_n_s_pathlib, __pyx_k_pathlib, sizeof(__pyx_k_pathlib), 0, 0, 1, 1},
  {&__pyx_n_s_pg, __pyx_k_pg, sizeof(__pyx_k_pg), 0, 0, 1, 1},
  {&__pyx_n_s_pred, __pyx_k_pred, sizeof(__pyx_k_pred), 0, 0, 1, 1},
  {&__pyx_n_s_predict, __pyx_k_predict, sizeof(__pyx_k_predict), 0, 0, 1, 1},
  {&__pyx_n_s_prediction, __pyx_k_prediction, sizeof(__pyx_k_prediction), 0, 0, 1, 1},
  {&__pyx_n_s_prediction_generator, __pyx_k_prediction_generator, sizeof(__pyx_k_prediction_generator), 0, 0, 1, 1},
  {&__pyx_n_s_prediction_generator_locals_pred, __pyx_k_prediction_generator_locals_pred, sizeof(__pyx_k_prediction_generator_locals_pred), 0, 0, 1, 1},
  {&__pyx_n_s_prediction_generator_sub, __pyx_k_prediction_generator_sub, sizeof(__pyx_k_prediction_generator_sub), 0, 0, 1, 1},
  {&__pyx_n_s_prediction_requests, __pyx_k_prediction_requests, sizeof(__pyx_k_prediction_requests), 0, 0, 1, 1},
  {&__pyx_n_s_predictions, __pyx_k_predictions, sizeof(__pyx_k_predictions), 0, 0, 1, 1},
  {&__pyx_n_s_preds, __pyx_k_preds, sizeof(__pyx_k_preds), 0, 0, 1, 1},
  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
  {&__pyx_n_s_prev, __pyx_k_prev, sizeof(__pyx_k_prev), 0, 0, 1, 1},
  {&__pyx_n_s_prev_sig, __pyx_k_prev_sig, sizeof(__pyx_k_prev_sig), 0, 0, 1, 1},
  {&__pyx_n_s_previous, __pyx_k_previous, sizeof(__pyx_k_previous), 0, 0, 1, 1},
  {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
  {&__pyx_n_s_proof, __pyx_k_proof, sizeof(__pyx_k_proof), 0, 0, 1, 1},
  {&__pyx_n_s_proof_state, __pyx_k_proof_state, sizeof(__pyx_k_proof_state), 0, 0, 1, 1},
  {&__pyx_n_s_propagate, __pyx_k_propagate, sizeof(__pyx_k_propagate), 0, 0, 1, 1},
  {&__pyx_n_s_propagate_2, __pyx_k_propagate_2, sizeof(__pyx_k_propagate_2), 0, 0, 1, 1},
  {&__pyx_n_s_pytact, __pyx_k_pytact, sizeof(__pyx_k_pytact), 0, 0, 1, 1},
  {&__pyx_n_s_pytact_data_reader, __pyx_k_pytact_data_reader, sizeof(__pyx_k_pytact_data_reader), 0, 0, 1, 1},
  {&__pyx_kp_s_pytact_data_reader_pyx, __pyx_k_pytact_data_reader_pyx, sizeof(__pyx_k_pytact_data_reader_pyx), 0, 0, 1, 0},
  {&__pyx_n_s_pytact_graph_api_capnp, __pyx_k_pytact_graph_api_capnp, sizeof(__pyx_k_pytact_graph_api_capnp), 0, 0, 1, 1},
  {&__pyx_n_s_pytact_graph_api_capnp_cython, __pyx_k_pytact_graph_api_capnp_cython, sizeof(__pyx_k_pytact_graph_api_capnp_cython), 0, 0, 1, 1},
  {&__pyx_kp_s_pytact_graph_api_capnp_cython_Ab, __pyx_k_pytact_graph_api_capnp_cython_Ab, sizeof(__pyx_k_pytact_graph_api_capnp_cython_Ab), 0, 0, 1, 0},
  {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 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_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
  {&__pyx_n_u_rb, __pyx_k_rb, sizeof(__pyx_k_rb), 0, 1, 0, 1},
  {&__pyx_n_s_read_multiple_packed, __pyx_k_read_multiple_packed, sizeof(__pyx_k_read_multiple_packed), 0, 0, 1, 1},
  {&__pyx_n_s_reader, __pyx_k_reader, sizeof(__pyx_k_reader), 0, 0, 1, 1},
  {&__pyx_n_s_record, __pyx_k_record, sizeof(__pyx_k_record), 0, 0, 1, 1},
  {&__pyx_n_s_recorded_response, __pyx_k_recorded_response, sizeof(__pyx_k_recorded_response), 0, 0, 1, 1},
  {&__pyx_kp_u_recorded_response_Recorded_respo, __pyx_k_recorded_response_Recorded_respo, sizeof(__pyx_k_recorded_response_Recorded_respo), 0, 1, 0, 0},
  {&__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_relative_to, __pyx_k_relative_to, sizeof(__pyx_k_relative_to), 0, 0, 1, 1},
  {&__pyx_n_s_rep, __pyx_k_rep, sizeof(__pyx_k_rep), 0, 0, 1, 1},
  {&__pyx_n_s_representative, __pyx_k_representative, sizeof(__pyx_k_representative), 0, 0, 1, 1},
  {&__pyx_n_s_representatives, __pyx_k_representatives, sizeof(__pyx_k_representatives), 0, 0, 1, 1},
  {&__pyx_n_s_request, __pyx_k_request, sizeof(__pyx_k_request), 0, 0, 1, 1},
  {&__pyx_n_s_resource, __pyx_k_resource, sizeof(__pyx_k_resource), 0, 0, 1, 1},
  {&__pyx_n_s_response, __pyx_k_response, sizeof(__pyx_k_response), 0, 0, 1, 1},
  {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1},
  {&__pyx_n_s_return, __pyx_k_return, sizeof(__pyx_k_return), 0, 0, 1, 1},
  {&__pyx_n_s_returncode, __pyx_k_returncode, sizeof(__pyx_k_returncode), 0, 0, 1, 1},
  {&__pyx_n_s_reversed, __pyx_k_reversed, sizeof(__pyx_k_reversed), 0, 0, 1, 1},
  {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1},
  {&__pyx_n_s_schema, __pyx_k_schema, sizeof(__pyx_k_schema), 0, 0, 1, 1},
  {&__pyx_n_s_seen, __pyx_k_seen, sizeof(__pyx_k_seen), 0, 0, 1, 1},
  {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
  {&__pyx_kp_s_self_edges_self_graph_index_cann, __pyx_k_self_edges_self_graph_index_cann, sizeof(__pyx_k_self_edges_self_graph_index_cann), 0, 0, 1, 0},
  {&__pyx_kp_s_self_graph_index_cannot_be_conve, __pyx_k_self_graph_index_cannot_be_conve, sizeof(__pyx_k_self_graph_index_cannot_be_conve), 0, 0, 1, 0},
  {&__pyx_kp_s_self_graph_index_self_node_canno, __pyx_k_self_graph_index_self_node_canno, sizeof(__pyx_k_self_graph_index_self_node_canno), 0, 0, 1, 0},
  {&__pyx_kp_s_self_graph_index_self_reader_can, __pyx_k_self_graph_index_self_reader_can, sizeof(__pyx_k_self_graph_index_self_reader_can), 0, 0, 1, 0},
  {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1},
  {&__pyx_n_s_set, __pyx_k_set, sizeof(__pyx_k_set), 0, 0, 1, 1},
  {&__pyx_kp_s_set_Definition, __pyx_k_set_Definition, sizeof(__pyx_k_set_Definition), 0, 0, 1, 0},
  {&__pyx_kp_s_set_Definition_None, __pyx_k_set_Definition_None, sizeof(__pyx_k_set_Definition_None), 0, 0, 1, 0},
  {&__pyx_kp_s_set_Node, __pyx_k_set_Node, sizeof(__pyx_k_set_Node), 0, 0, 1, 0},
  {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1},
  {&__pyx_n_s_setrlimit, __pyx_k_setrlimit, sizeof(__pyx_k_setrlimit), 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_setup_dataset, __pyx_k_setup_dataset, sizeof(__pyx_k_setup_dataset), 0, 0, 1, 1},
  {&__pyx_n_s_should_propagate, __pyx_k_should_propagate, sizeof(__pyx_k_should_propagate), 0, 0, 1, 1},
  {&__pyx_n_s_shutil, __pyx_k_shutil, sizeof(__pyx_k_shutil), 0, 0, 1, 1},
  {&__pyx_n_s_signal, __pyx_k_signal, sizeof(__pyx_k_signal), 0, 0, 1, 1},
  {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
  {&__pyx_n_s_sleep, __pyx_k_sleep, sizeof(__pyx_k_sleep), 0, 0, 1, 1},
  {&__pyx_n_s_socket, __pyx_k_socket, sizeof(__pyx_k_socket), 0, 0, 1, 1},
  {&__pyx_kp_s_socket_socket, __pyx_k_socket_socket, sizeof(__pyx_k_socket_socket), 0, 0, 1, 0},
  {&__pyx_n_s_soft, __pyx_k_soft, sizeof(__pyx_k_soft), 0, 0, 1, 1},
  {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1},
  {&__pyx_n_s_spine_only, __pyx_k_spine_only, sizeof(__pyx_k_spine_only), 0, 0, 1, 1},
  {&__pyx_n_u_squashfuse, __pyx_k_squashfuse, sizeof(__pyx_k_squashfuse), 0, 1, 0, 1},
  {&__pyx_n_s_stack, __pyx_k_stack, sizeof(__pyx_k_stack), 0, 0, 1, 1},
  {&__pyx_n_s_stack_size, __pyx_k_stack_size, sizeof(__pyx_k_stack_size), 0, 0, 1, 1},
  {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
  {&__pyx_n_s_staticmethod, __pyx_k_staticmethod, sizeof(__pyx_k_staticmethod), 0, 0, 1, 1},
  {&__pyx_n_s_stderr, __pyx_k_stderr, sizeof(__pyx_k_stderr), 0, 0, 1, 1},
  {&__pyx_n_s_stdout, __pyx_k_stdout, sizeof(__pyx_k_stdout), 0, 0, 1, 1},
  {&__pyx_n_s_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
  {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
  {&__pyx_n_s_sub_context, __pyx_k_sub_context, sizeof(__pyx_k_sub_context), 0, 0, 1, 1},
  {&__pyx_n_s_subprocess, __pyx_k_subprocess, sizeof(__pyx_k_subprocess), 0, 0, 1, 1},
  {&__pyx_kp_u_suggests_that_the_real_root_mig, __pyx_k_suggests_that_the_real_root_mig, sizeof(__pyx_k_suggests_that_the_real_root_mig), 0, 1, 0, 0},
  {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1},
  {&__pyx_n_s_synchronize, __pyx_k_synchronize, sizeof(__pyx_k_synchronize), 0, 0, 1, 1},
  {&__pyx_n_s_synchronized, __pyx_k_synchronized, sizeof(__pyx_k_synchronized), 0, 0, 1, 1},
  {&__pyx_n_s_tactic, __pyx_k_tactic, sizeof(__pyx_k_tactic), 0, 0, 1, 1},
  {&__pyx_n_u_tactic, __pyx_k_tactic, sizeof(__pyx_k_tactic), 0, 1, 0, 1},
  {&__pyx_n_u_tacticText, __pyx_k_tacticText, sizeof(__pyx_k_tacticText), 0, 1, 0, 1},
  {&__pyx_n_s_tactic_text, __pyx_k_tactic_text, sizeof(__pyx_k_tactic_text), 0, 0, 1, 1},
  {&__pyx_n_s_tactics, __pyx_k_tactics, sizeof(__pyx_k_tactics), 0, 0, 1, 1},
  {&__pyx_n_s_temp, __pyx_k_temp, sizeof(__pyx_k_temp), 0, 0, 1, 1},
  {&__pyx_n_u_term, __pyx_k_term, sizeof(__pyx_k_term), 0, 1, 0, 1},
  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1},
  {&__pyx_n_s_textPrediction, __pyx_k_textPrediction, sizeof(__pyx_k_textPrediction), 0, 0, 1, 1},
  {&__pyx_n_s_threading, __pyx_k_threading, sizeof(__pyx_k_threading), 0, 0, 1, 1},
  {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1},
  {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1},
  {&__pyx_n_s_to_dict, __pyx_k_to_dict, sizeof(__pyx_k_to_dict), 0, 0, 1, 1},
  {&__pyx_n_s_traversal_limit_in_words, __pyx_k_traversal_limit_in_words, sizeof(__pyx_k_traversal_limit_in_words), 0, 0, 1, 1},
  {&__pyx_n_s_typing, __pyx_k_typing, sizeof(__pyx_k_typing), 0, 0, 1, 1},
  {&__pyx_n_u_unalignedDefinitions, __pyx_k_unalignedDefinitions, sizeof(__pyx_k_unalignedDefinitions), 0, 1, 0, 1},
  {&__pyx_n_u_unalignedTactics, __pyx_k_unalignedTactics, sizeof(__pyx_k_unalignedTactics), 0, 1, 0, 1},
  {&__pyx_n_s_unknown_definitions, __pyx_k_unknown_definitions, sizeof(__pyx_k_unknown_definitions), 0, 0, 1, 1},
  {&__pyx_n_s_unknown_tactics, __pyx_k_unknown_tactics, sizeof(__pyx_k_unknown_tactics), 0, 0, 1, 1},
  {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
  {&__pyx_n_s_which, __pyx_k_which, sizeof(__pyx_k_which), 0, 0, 1, 1},
  {&__pyx_n_s_with_suffix, __pyx_k_with_suffix, sizeof(__pyx_k_with_suffix), 0, 0, 1, 1},
  {&__pyx_n_s_write_packed, __pyx_k_write_packed, sizeof(__pyx_k_write_packed), 0, 0, 1, 1},
  #endif
  {0, 0, 0, 0, 0, 0, 0}
};
/* #### Code section: cached_builtins ### */
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_staticmethod = __Pyx_GetBuiltinName(__pyx_n_s_staticmethod); if (!__pyx_builtin_staticmethod) __PYX_ERR(0, 1641, __pyx_L1_error)
  __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s_super); if (!__pyx_builtin_super) __PYX_ERR(0, 113, __pyx_L1_error)
  __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(0, 117, __pyx_L1_error)
  __pyx_builtin_memoryview = __Pyx_GetBuiltinName(__pyx_n_s_memoryview); if (!__pyx_builtin_memoryview) __PYX_ERR(0, 134, __pyx_L1_error)
  __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 131, __pyx_L1_error)
  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 171, __pyx_L1_error)
  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 186, __pyx_L1_error)
  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error)
  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 239, __pyx_L1_error)
  __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(0, 581, __pyx_L1_error)
  __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) __PYX_ERR(0, 1063, __pyx_L1_error)
  __pyx_builtin_reversed = __Pyx_GetBuiltinName(__pyx_n_s_reversed); if (!__pyx_builtin_reversed) __PYX_ERR(0, 1237, __pyx_L1_error)
  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(0, 1472, __pyx_L1_error)
  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 1608, __pyx_L1_error)
  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 68, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: cached_constants ### */

static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "pytact/data_reader.pyx":131
 *         # No need to keep the file open, at least on linux
 *         # Closing this prevents file descriptor limits from being exceeded
 *         with open(fname, 'rb') as f:             # <<<<<<<<<<<<<<
 *             return mmap.mmap(f.fileno(), length=0, access=mmap.ACCESS_READ)
 *     with create_mmap(fname) as mm:
 */
  __pyx_tuple__2 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);

  /* "pytact/data_reader.pyx":128
 *     This is a low-level function. Prefer to use `data_reader` or `lowlevel_data_reader`.
 *     """
 *     def create_mmap(fname):             # <<<<<<<<<<<<<<
 *         # No need to keep the file open, at least on linux
 *         # Closing this prevents file descriptor limits from being exceeded
 */
  __pyx_tuple__3 = PyTuple_Pack(2, __pyx_n_s_fname, __pyx_n_s_f); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
  __pyx_codeobj__4 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__3, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_create_mmap, 128, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__4)) __PYX_ERR(0, 128, __pyx_L1_error)

  /* "pytact/data_reader.pyx":230
 *         if not mountpoint.is_mount():
 *             if shutil.which('squashfuse') is None:
 *                 raise ValueError(f"Unable to mount dataset. Executable 'squashfuse' not found.")             # <<<<<<<<<<<<<<
 *             args = ['squashfuse', str(dataset_path), str(mountpoint)]
 *             result = subprocess.run(args,
 */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_Unable_to_mount_dataset_Executab); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);

  /* "pytact/data_reader.pyx":411
 *     def __getitem__(self, uint index) -> tuple[int, Node]:
 *         if index >= self.count:
 *             raise IndexError('Out of bounds')             # <<<<<<<<<<<<<<
 *         cdef C_Graph_EdgeTarget_Reader edge = self.edges[self.start+index]
 *         cdef C_Graph_EdgeTarget_Target_Reader target = edge.getTarget()
 */
  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_Out_of_bounds); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 411, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);

  /* "pytact/data_reader.pyx":1131
 *         # The first dependency is the file itself, which we do not want to expose here.
 *         count = dependencies.size() - 1
 *         def get(index):             # <<<<<<<<<<<<<<
 *             temp = dependencies[index+1]
 *             return Path((<char*>temp.begin())[:temp.size()])
 */
  __pyx_tuple__14 = PyTuple_Pack(2, __pyx_n_s_index, __pyx_n_s_temp); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);
  __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_get_2, 1131, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(0, 1131, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1167
 *         """
 *         if across_files and not spine_only:
 *             raise Exception("Options across_files = True and spine_only = False are incompatible")             # <<<<<<<<<<<<<<
 *         if spine_only:
 *             if self.representative is None: return ()
 */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_Options_across_files_True_and_sp); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);

  /* "pytact/data_reader.pyx":1397
 *         return graph_api_capnp.PredictionProtocol.Response.new_message(prediction=preds)
 *     else:
 *         raise Exception("Incorrect predictions received")             # <<<<<<<<<<<<<<
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (
 */
  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_u_Incorrect_predictions_received); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 1397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);

  /* "pytact/data_reader.pyx":1413
 *     reader = graph_api_capnp.PredictionProtocol.Request.read_multiple_packed(
 *         socket, traversal_limit_in_words=2**64-1)
 *     def next_disabled_sigint():             # <<<<<<<<<<<<<<
 *         """
 *         A variant of `next` that disables Python's sigkill signal handler while waiting for new messages.
 */
  __pyx_tuple__22 = PyTuple_Pack(2, __pyx_n_s_prev_sig, __pyx_n_s_msg); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 1413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_next_disabled_sigint, 1413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 1413, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1503
 *                 lgenerator.send(response)
 *                 with online_definitions_initialize(defs, init) as definitions:
 *                     def prediction_generator_sub():             # <<<<<<<<<<<<<<
 *                         nonlocal msg
 *                         msg = yield from prediction_generator(lgenerator, definitions)
 */
  __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_prediction_generator_sub, 1503, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 1503, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1509
 *                     yield GlobalContextMessage(definitions, init.tactics, init.log_annotation, pg)
 *                     if next(pg, None) is not None:
 *                         raise Exception("Not all prediction requests were consumed")             # <<<<<<<<<<<<<<
 *         elif msg.is_predict:
 *             with online_data_predict(defs, msg.predict) as proof_state:
 */
  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_u_Not_all_prediction_requests_were); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 1509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);

  /* "pytact/data_reader.pyx":1528
 *             msg = next(lgenerator, None)
 *         else:
 *             raise Exception("Capnp protocol error")             # <<<<<<<<<<<<<<
 * 
 * def capnp_message_generator(socket: socket.socket, record: BinaryIO | None = None) -> GlobalContextMessage:
 */
  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_u_Capnp_protocol_error); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 1528, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);

  /* "pytact/data_reader.pyx":94
 * from immutables import Map
 * import signal
 * import pytact.graph_api_capnp_cython as apic             # <<<<<<<<<<<<<<
 * import capnp
 * import pytact.graph_api_capnp as graph_api_capnp
 */
  __pyx_tuple__34 = PyTuple_Pack(2, __pyx_n_s_pytact, __pyx_n_s_graph_api_capnp_cython); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);

  /* "pytact/data_reader.pyx":96
 * import pytact.graph_api_capnp_cython as apic
 * import capnp
 * import pytact.graph_api_capnp as graph_api_capnp             # <<<<<<<<<<<<<<
 * from capnp.includes.types cimport *
 * from libcpp.vector cimport vector
 */
  __pyx_tuple__35 = PyTuple_Pack(2, __pyx_n_s_pytact, __pyx_n_s_graph_api_capnp); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);

  /* "pytact/data_reader.pyx":110
 * import time
 * 
 * T = TypeVar('T')             # <<<<<<<<<<<<<<
 * class TupleLike():
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):
 */
  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_n_u_T); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__36);
  __Pyx_GIVEREF(__pyx_tuple__36);

  /* "pytact/data_reader.pyx":112
 * T = TypeVar('T')
 * class TupleLike():
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):             # <<<<<<<<<<<<<<
 *         super().__init__()
 *         self._count = count
 */
  __pyx_tuple__37 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_count, __pyx_n_s_index_getter); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__37);
  __Pyx_GIVEREF(__pyx_tuple__37);
  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_init, 112, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) __PYX_ERR(0, 112, __pyx_L1_error)

  /* "pytact/data_reader.pyx":116
 *         self._count = count
 *         self._index_getter = index_getter
 *     def __getitem__(self, index: int) -> T:             # <<<<<<<<<<<<<<
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 */
  __pyx_tuple__39 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_index); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);
  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_getitem, 116, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) __PYX_ERR(0, 116, __pyx_L1_error)

  /* "pytact/data_reader.pyx":119
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return self._count
 * 
 */
  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__41);
  __Pyx_GIVEREF(__pyx_tuple__41);
  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_len, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) __PYX_ERR(0, 119, __pyx_L1_error)

  /* "pytact/data_reader.pyx":122
 *         return self._count
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def file_dataset_reader(fname: Path) -> Generator[Any, None, None]:
 *     """Load a single dataset file into memory, and expose it's raw Cap'n Proto structures.
 */
  __pyx_tuple__43 = PyTuple_Pack(6, __pyx_n_s_fname, __pyx_n_s_create_mmap, __pyx_n_s_create_mmap, __pyx_n_s_mm, __pyx_n_s_mv, __pyx_n_s_g); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__43);
  __Pyx_GIVEREF(__pyx_tuple__43);
  __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_file_dataset_reader, 122, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 122, __pyx_L1_error)

  /* "pytact/data_reader.pyx":204
 *         self.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, local_to_global)
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         """Convert dependency-index relative to a graph-id to a new graph-id.
 * 
 */
  __pyx_tuple__44 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_graph, __pyx_n_s_dep_index); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__44);
  __Pyx_GIVEREF(__pyx_tuple__44);
  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_local_to_global, 204, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 204, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 */
  __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__47);
  __Pyx_GIVEREF(__pyx_tuple__47);
  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "pytact/data_reader.pyx":221
 *         return len(self.graphs)
 * 
 * def setup_dataset(dataset_path: Path):             # <<<<<<<<<<<<<<
 *     if not dataset_path.exists():
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 */
  __pyx_tuple__49 = PyTuple_Pack(5, __pyx_n_s_dataset_path, __pyx_n_s_mountpoint, __pyx_n_s_args, __pyx_n_s_result, __pyx_n_s__31); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__49);
  __Pyx_GIVEREF(__pyx_tuple__49);
  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_setup_dataset, 221, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(0, 221, __pyx_L1_error)

  /* "pytact/data_reader.pyx":248
 *         return dataset_path
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def lowlevel_data_reader(dataset_path: Path) -> Generator[LowlevelDataReader, None, None]:
 *     """Map a directory of dataset files into memory, and expose their raw Cap'n Proto structures.
 */
  __pyx_tuple__51 = PyTuple_Pack(11, __pyx_n_s_dataset_path, __pyx_n_s_mountpoint, __pyx_n_s_fnames, __pyx_n_s_soft, __pyx_n_s_hard, __pyx_n_s_new_soft, __pyx_n_s_stack, __pyx_n_s_dataset, __pyx_n_s_dr, __pyx_n_s_f, __pyx_n_s_fname); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__51);
  __Pyx_GIVEREF(__pyx_tuple__51);
  __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_lowlevel_data_reader, 248, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 248, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__53 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__53)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__59 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__59)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__61 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__61)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__67 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__67)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__68 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__68)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__69 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__69)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__70 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__70)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__71 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__71)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__73 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__73)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "pytact/data_reader.pyx":875
 *         return Representative_List.init(self.reader.getExternalPrevious(), self.graph_index, self.graph)
 * 
 *     def _global_context(self, across_files : bool, inclusive, seen : set[Node]):             # <<<<<<<<<<<<<<
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative
 */
  __pyx_tuple__74 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_across_files, __pyx_n_s_inclusive, __pyx_n_s_seen, __pyx_n_s_d, __pyx_n_s_eprev); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(0, 875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__74);
  __Pyx_GIVEREF(__pyx_tuple__74);
  __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__74, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_global_context, 875, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 875, __pyx_L1_error)

  /* "pytact/data_reader.pyx":895
 *             d = d.previous
 * 
 *     def global_context(self, across_files : bool = True, inclusive = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created.
 * 
 */
  __pyx_tuple__75 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_across_files, __pyx_n_s_inclusive); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__75);
  __Pyx_GIVEREF(__pyx_tuple__75);
  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 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_pytact_data_reader_pyx, __pyx_n_s_global_context_2, 895, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 895, __pyx_L1_error)
  __pyx_tuple__77 = PyTuple_Pack(2, Py_True, Py_False); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_tuple__77);

  /* "pytact/data_reader.pyx":918
 *         )
 * 
 *     def clustered_global_context(self, across_files : bool = True, inclusive : bool = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created, clustered into
 *         mutually recursive cliques.
 */
  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 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_pytact_data_reader_pyx, __pyx_n_s_clustered_global_context, 918, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(0, 918, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1057
 *         return self.graph_index.representatives[self.graph] == self.node.nodeid
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def _group_by_clusters(cls, definitions : Iterable[Definition]) -> Iterable[list[Definition]]:
 *         definitions_it = iter(definitions)
 */
  __pyx_tuple__79 = PyTuple_Pack(7, __pyx_n_s_cls, __pyx_n_s_definitions, __pyx_n_s_definitions_it, __pyx_n_s_node_2, __pyx_n_s_rep, __pyx_n_s_n, __pyx_n_s_cluster); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__79);
  __Pyx_GIVEREF(__pyx_tuple__79);
  __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_group_by_clusters, 1057, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(0, 1057, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1151
 *             return Node.init(self.graph, representative, self.graph_index).definition
 * 
 *     def definitions(self, across_files = False, spine_only = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */
  __pyx_tuple__84 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_across_files, __pyx_n_s_spine_only); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__84);
  __Pyx_GIVEREF(__pyx_tuple__84);
  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_definitions, 1151, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __pyx_tuple__86 = PyTuple_Pack(2, Py_False, Py_False); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__86);
  __Pyx_GIVEREF(__pyx_tuple__86);

  /* "pytact/data_reader.pyx":1177
 *             return Dataset_Definition_List.init(self.reader.getDefinitions(), self.graph_index, self.graph)
 * 
 *     def clustered_definitions(self, across_files = False, spine_only = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file, clustered by mutually recursive definitions.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */
  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_clustered_definitions, 1177, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(0, 1177, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1203
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     def node_by_id(self, nodeid: NodeId) -> Node:             # <<<<<<<<<<<<<<
 *         """Lookup a node inside of this file by it's local node-id. This is a low-level function."""
 *         return Node.init(self.graph, nodeid, self.graph_index)
 */
  __pyx_tuple__88 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_nodeid); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__88);
  __Pyx_GIVEREF(__pyx_tuple__88);
  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_node_by_id, 1203, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(0, 1203, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__90 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__90)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1207
 *         return Node.init(self.graph, nodeid, self.graph_index)
 * 
 * def lowlevel_to_highlevel(LowlevelDataReader lreader) -> dict[Path, Dataset]:             # <<<<<<<<<<<<<<
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)
 */
  __pyx_tuple__92 = PyTuple_Pack(3, __pyx_n_s_lreader, __pyx_n_s_f, __pyx_n_s_g); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(0, 1207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__92);
  __Pyx_GIVEREF(__pyx_tuple__92);
  __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_lowlevel_to_highlevel, 1207, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(0, 1207, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1212
 *             for f, g in lreader.graphid_by_filename.items()}
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def data_reader(dataset_path: Path) -> Generator[dict[Path, Dataset], None, None]:
 *     """Load a directory of dataset files into memory, and expose the data they contain.
 */
  __pyx_tuple__94 = PyTuple_Pack(2, __pyx_n_s_dataset_path, __pyx_n_s_lreader); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(0, 1212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__94);
  __Pyx_GIVEREF(__pyx_tuple__94);
  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_data_reader, 1212, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(0, 1212, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1251
 *         return wrapper
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 */
  __pyx_codeobj__95 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_local_to_global, 1251, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__95)) __PYX_ERR(0, 1251, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1271
 *         return None
 * 
 *     def definitions(self, full : bool = True) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """The list of definitions that are currently in the global context.
 * 
 */
  __pyx_tuple__96 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_full, __pyx_n_s_representative, __pyx_n_s_graph_index, __pyx_n_s_size); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__96);
  __Pyx_GIVEREF(__pyx_tuple__96);
  __pyx_codeobj__97 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_definitions, 1271, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__97)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __pyx_tuple__98 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__98);
  __Pyx_GIVEREF(__pyx_tuple__98);

  /* "pytact/data_reader.pyx":1295
 *         return representative.global_context(inclusive = True, across_files = full)
 * 
 *     def clustered_definitions(self, full : bool = True) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the global context, clustered by mutually recursive definitions.
 * 
 */
  __pyx_tuple__99 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_full); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(0, 1295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__99);
  __Pyx_GIVEREF(__pyx_tuple__99);
  __pyx_codeobj__100 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__99, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_clustered_definitions, 1295, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__100)) __PYX_ERR(0, 1295, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_codeobj__101 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__101)) __PYX_ERR(1, 1, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 */
  __pyx_codeobj__102 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__102)) __PYX_ERR(1, 3, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1304
 *         return Definition._group_by_clusters(self.definitions(full))
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_definitions_initialize(OnlineDefinitionsReader stack,
 *                                   PredictionProtocol_Request_Initialize_Reader init) -> Generator[OnlineDefinitionsReader, None, None]:
 */
  __pyx_tuple__103 = PyTuple_Pack(4, __pyx_n_s_stack, __pyx_n_s_init_2, __pyx_n_s_graph_index, __pyx_n_s_dr); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(0, 1304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__103);
  __Pyx_GIVEREF(__pyx_tuple__103);
  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__103, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_online_definitions_initialize, 1304, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 1304, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1322
 *     yield dr
 * 
 * def empty_online_definitions_initialize() -> OnlineDefinitionsReader:             # <<<<<<<<<<<<<<
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 */
  __pyx_tuple__104 = PyTuple_Pack(1, __pyx_n_s_defs); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(0, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__104);
  __Pyx_GIVEREF(__pyx_tuple__104);
  __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_empty_online_definitions_initial, 1322, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(0, 1322, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1325
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_data_predict(OnlineDefinitionsReader base,
 *                         PredictionProtocol_Request_Predict_Reader predict) -> Generator[ProofState, None, None]:
 */
  __pyx_tuple__106 = PyTuple_Pack(4, __pyx_n_s_base, __pyx_n_s_predict, __pyx_n_s_p, __pyx_n_s_graph_index); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__106);
  __Pyx_GIVEREF(__pyx_tuple__106);
  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__106, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_online_data_predict, 1325, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(0, 1325, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1384
 *                                     None]
 * 
 * def convert_predictions(preds, stack_size):             # <<<<<<<<<<<<<<
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,
 */
  __pyx_tuple__107 = PyTuple_Pack(5, __pyx_n_s_preds, __pyx_n_s_stack_size, __pyx_n_s_pred, __pyx_n_s_pred, __pyx_n_s_a); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(0, 1384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__107);
  __Pyx_GIVEREF(__pyx_tuple__107);
  __pyx_codeobj__108 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__107, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_convert_predictions, 1384, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__108)) __PYX_ERR(0, 1384, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1399
 *         raise Exception("Incorrect predictions received")
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */
  __pyx_tuple__109 = PyTuple_Pack(8, __pyx_n_s_socket, __pyx_n_s_record, __pyx_n_s_reader, __pyx_n_s_next_disabled_sigint, __pyx_n_s_next_disabled_sigint, __pyx_n_s_msg, __pyx_n_s_cython_msg, __pyx_n_s_response); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(0, 1399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__109);
  __Pyx_GIVEREF(__pyx_tuple__109);
  __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__109, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_capnp_message_generator_lowlevel, 1399, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(0, 1399, __pyx_L1_error)
  __pyx_tuple__110 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(0, 1399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__110);
  __Pyx_GIVEREF(__pyx_tuple__110);

  /* "pytact/data_reader.pyx":1444
 *         msg = next_disabled_sigint()
 * 
 * def capnp_message_generator_from_file_lowlevel(message_file: BinaryIO, check = True) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */
  __pyx_tuple__111 = PyTuple_Pack(7, __pyx_n_s_message_file, __pyx_n_s_check, __pyx_n_s_message_reader, __pyx_n_s_request, __pyx_n_s_cython_msg, __pyx_n_s_response, __pyx_n_s_recorded_response); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(0, 1444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__111);
  __Pyx_GIVEREF(__pyx_tuple__111);
  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__111, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_capnp_message_generator_from_fil, 1444, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 1444, __pyx_L1_error)
  __pyx_tuple__112 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(0, 1444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__112);
  __Pyx_GIVEREF(__pyx_tuple__112);

  /* "pytact/data_reader.pyx":1483
 * 
 * 
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):             # <<<<<<<<<<<<<<
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 */
  __pyx_tuple__113 = PyTuple_Pack(13, __pyx_n_s_lgenerator, __pyx_n_s_defs, __pyx_n_s_msg, __pyx_n_s_response, __pyx_n_s_init_2, __pyx_n_s_definitions, __pyx_n_s_prediction_generator_sub, __pyx_n_s_prediction_generator_sub, __pyx_n_s_pg, __pyx_n_s_proof_state, __pyx_n_s_preds, __pyx_n_s_alignment, __pyx_n_s_d); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__113);
  __Pyx_GIVEREF(__pyx_tuple__113);
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 13, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__113, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_prediction_generator, 1483, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 1483, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1530
 *             raise Exception("Capnp protocol error")
 * 
 * def capnp_message_generator(socket: socket.socket, record: BinaryIO | None = None) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """A generator that facilitates communication between a prediction server and a Coq process.
 * 
 */
  __pyx_tuple__114 = PyTuple_Pack(5, __pyx_n_s_socket, __pyx_n_s_record, __pyx_n_s_lgenerator, __pyx_n_s_defs, __pyx_n_s_pg); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(0, 1530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__114);
  __Pyx_GIVEREF(__pyx_tuple__114);
  __pyx_codeobj__115 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_capnp_message_generator, 1530, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__115)) __PYX_ERR(0, 1530, __pyx_L1_error)
  __pyx_tuple__116 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 1530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__116);
  __Pyx_GIVEREF(__pyx_tuple__116);

  /* "pytact/data_reader.pyx":1554
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 * def capnp_message_generator_from_file(message_file: BinaryIO, check = True) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """Replay and verify a pre-recorded communication sequence between Coq and a prediction server.
 * 
 */
  __pyx_tuple__117 = PyTuple_Pack(5, __pyx_n_s_message_file, __pyx_n_s_check, __pyx_n_s_lgenerator, __pyx_n_s_defs, __pyx_n_s_pg); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(0, 1554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__117);
  __Pyx_GIVEREF(__pyx_tuple__117);
  __pyx_codeobj__118 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__117, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_capnp_message_generator_from_fil_2, 1554, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__118)) __PYX_ERR(0, 1554, __pyx_L1_error)
  __pyx_tuple__119 = PyTuple_Pack(1, ((PyObject *)Py_True)); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(0, 1554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__119);
  __Pyx_GIVEREF(__pyx_tuple__119);

  /* "pytact/data_reader.pyx":1593
 *     ```
 *     """
 *     def __init__(self, cache, parent: GlobalContextSets | None,             # <<<<<<<<<<<<<<
 *                  should_propagate: Callable[[Definition], bool]):
 *         """Do not call directly. Use `GlobalContextSets.new_context` and `GlobalContextSets.sub_context`."""
 */
  __pyx_tuple__120 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_cache, __pyx_n_s_parent, __pyx_n_s_should_propagate); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__120);
  __Pyx_GIVEREF(__pyx_tuple__120);
  __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_init, 1593, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(0, 1593, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1600
 *         self.should_propagate = should_propagate
 * 
 *     def _propagate(self, d: Definition, context: Map):             # <<<<<<<<<<<<<<
 *         self.cache = self.cache.set(d, context)
 *         if self.should_propagate(d) and (parent := self.parent):
 */
  __pyx_tuple__122 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_d, __pyx_n_s_context, __pyx_n_s_parent); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 1600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__122);
  __Pyx_GIVEREF(__pyx_tuple__122);
  __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_propagate, 1600, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) __PYX_ERR(0, 1600, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1605
 *             parent._propagate(d, context)
 * 
 *     def _global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         try:
 *             return self.cache[d]
 */
  __pyx_tuple__124 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_d, __pyx_n_s_external_previous, __pyx_n_s_new_set, __pyx_n_s_ep, __pyx_n_s_prev); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(0, 1605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__124);
  __Pyx_GIVEREF(__pyx_tuple__124);
  __pyx_codeobj__125 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__124, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_global_context_set, 1605, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__125)) __PYX_ERR(0, 1605, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1623
 *             return new_set
 * 
 *     def global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         """Retrieve the global context of a definition, caching the result, and intermediate results."""
 *         start = d.cluster_representative
 */
  __pyx_tuple__126 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_d, __pyx_n_s_start, __pyx_n_s_context); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(0, 1623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__126);
  __Pyx_GIVEREF(__pyx_tuple__126);
  __pyx_codeobj__127 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__126, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_global_context_set_2, 1623, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__127)) __PYX_ERR(0, 1623, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1631
 *         return context
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     def sub_context(self, propagate: Callable[[Definition], bool]) -> Generator[GlobalContextSets, None, None]:
 *         """Create a sub-context with a separate cache from it's parent, but sharing any info that was
 */
  __pyx_tuple__128 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_propagate_2); if (unlikely(!__pyx_tuple__128)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__128);
  __Pyx_GIVEREF(__pyx_tuple__128);
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__128, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_sub_context, 1631, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 1631, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1640
 *         yield GlobalContextSets(self.cache, self, propagate)
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 */
  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_new_context, 1640, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 1640, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1650
 *     NodeId nodeid
 * 
 * def node_dependencies(Node n, deps: set[Definition] | None = None) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Node` `n`, calculate the set of `Definition`'s that are directly reachable
 *     from `n`. Transitively reachable definitions are not included.
 */
  __pyx_tuple__129 = PyTuple_Pack(15, __pyx_n_s_n, __pyx_n_s_deps, __pyx_n_s_graph_index, __pyx_n_s_seen, __pyx_n_s_stack, __pyx_n_s_current_node, __pyx_n_s_children_index, __pyx_n_s_children_limit, __pyx_n_s_node_hash, __pyx_n_s_node_contents, __pyx_n_s_node_label, __pyx_n_s_edges, __pyx_n_s_edge_target, __pyx_n_s_child_graph, __pyx_n_s_child); if (unlikely(!__pyx_tuple__129)) __PYX_ERR(0, 1650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__129);
  __Pyx_GIVEREF(__pyx_tuple__129);
  __pyx_codeobj__130 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__129, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_node_dependencies, 1650, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__130)) __PYX_ERR(0, 1650, __pyx_L1_error)
  __pyx_tuple__131 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__131)) __PYX_ERR(0, 1650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__131);
  __Pyx_GIVEREF(__pyx_tuple__131);

  /* "pytact/data_reader.pyx":1687
 *     return deps
 * 
 * def definition_dependencies(d: Definition) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Definition` `d`, calculate the set of `Definition`'s that are directly reachable for `d`.
 *     Transitively reachable definitions are not included nor is `d` itself.
 */
  __pyx_tuple__132 = PyTuple_Pack(4, __pyx_n_s_d, __pyx_n_s_deps, __pyx_n_s__31, __pyx_n_s_c); if (unlikely(!__pyx_tuple__132)) __PYX_ERR(0, 1687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__132);
  __Pyx_GIVEREF(__pyx_tuple__132);
  __pyx_codeobj__133 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__132, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pytact_data_reader_pyx, __pyx_n_s_definition_dependencies, 1687, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__133)) __PYX_ERR(0, 1687, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}
/* #### Code section: init_constants ### */

static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) {
  #if CYTHON_USE_MODULE_STATE
  if (__Pyx_InitString(__pyx_string_tab[0], &__pyx_n_s_ACCESS_READ) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[1], &__pyx_n_s_Any) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[2], &__pyx_n_s_Argument_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[3], &__pyx_n_s_Argument_List___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[4], &__pyx_n_s_Argument_List___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[5], &__pyx_n_s_AssertionError) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[6], &__pyx_n_s_BinaryIO) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[7], &__pyx_kp_s_BinaryIO_None) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[8], &__pyx_n_s_Callable) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[9], &__pyx_kp_s_Callable_Definition_bool) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[10], &__pyx_kp_s_Callable_int_T) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[11], &__pyx_kp_u_Capnp_protocol_error) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[12], &__pyx_n_s_CheckAlignmentMessage) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[13], &__pyx_n_s_CheckAlignmentResponse) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[14], &__pyx_n_s_Constructor) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[15], &__pyx_n_s_Dataset) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[16], &__pyx_n_s_Dataset_Definition_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[17], &__pyx_n_s_Dataset_Definition_List___reduce) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[18], &__pyx_n_s_Dataset_Definition_List___setsta) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[19], &__pyx_n_s_Dataset_Reader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[20], &__pyx_n_s_Dataset___get___locals_get) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[21], &__pyx_n_s_Dataset___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[22], &__pyx_n_s_Dataset___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[23], &__pyx_n_s_Dataset_clustered_definitions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[24], &__pyx_n_s_Dataset_definitions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[25], &__pyx_kp_u_Dataset_does_not_exist) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[26], &__pyx_n_s_Dataset_node_by_id) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[27], &__pyx_n_s_Definition) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[28], &__pyx_n_s_Definition___get) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[29], &__pyx_n_s_Definition___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[30], &__pyx_n_s_Definition___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[31], &__pyx_n_s_Definition__global_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[32], &__pyx_n_s_Definition__group_by_clusters) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[33], &__pyx_n_s_Definition_clustered_global_cont) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[34], &__pyx_n_s_Definition_global_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[35], &__pyx_n_s_Discharged) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[36], &__pyx_n_s_EdgeTarget_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[37], &__pyx_n_s_EdgeTarget_List___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[38], &__pyx_n_s_EdgeTarget_List___setstate_cytho) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[39], &__pyx_n_s_ExitStack) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[40], &__pyx_n_s_Generator) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[41], &__pyx_kp_s_Generator_Any_None_None) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[42], &__pyx_kp_s_Generator_GlobalContextMessage_P) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[43], &__pyx_kp_s_Generator_GlobalContextSets_None) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[44], &__pyx_kp_s_Generator_LowlevelDataReader_Non) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[45], &__pyx_kp_s_Generator_OnlineDefinitionsReade) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[46], &__pyx_kp_s_Generator_ProofState_None_None) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[47], &__pyx_kp_s_Generator_dict_Path_Dataset_None) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[48], &__pyx_kp_s_Generator_pytact_graph_api_capnp) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[49], &__pyx_n_s_GlobalContextMessage) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[50], &__pyx_n_s_GlobalContextSets) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[51], &__pyx_kp_s_GlobalContextSets_None) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[52], &__pyx_n_s_GlobalContextSets___init) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[53], &__pyx_n_s_GlobalContextSets__global_contex) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[54], &__pyx_n_s_GlobalContextSets__propagate) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[55], &__pyx_n_s_GlobalContextSets_global_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[56], &__pyx_n_s_GlobalContextSets_new_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[57], &__pyx_n_s_GlobalContextSets_new_context_lo) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[58], &__pyx_n_s_GlobalContextSets_sub_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[59], &__pyx_kp_u_Incorrect_predictions_received) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[60], &__pyx_n_s_IndexError) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[61], &__pyx_n_s_Inductive) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[62], &__pyx_n_s_Iterable) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[63], &__pyx_kp_s_Iterable_Definition) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[64], &__pyx_kp_s_Iterable_list_Definition) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[65], &__pyx_n_s_KeyError) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[66], &__pyx_kp_s_Lazily_retrieve_a_the_global_con) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[67], &__pyx_n_s_LowlevelDataReader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[68], &__pyx_n_s_LowlevelDataReader___reduce_cyth) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[69], &__pyx_n_s_LowlevelDataReader___setstate_cy) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[70], &__pyx_n_s_LowlevelDataReader_local_to_glob) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[71], &__pyx_n_s_ManualConstant) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[72], &__pyx_n_s_ManualSectionConstant) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[73], &__pyx_n_s_Map) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[74], &__pyx_n_s_MemoryError) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[75], &__pyx_kp_u_Mount_did_not_appear) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[76], &__pyx_n_s_Node) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[77], &__pyx_n_s_NodeHash) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[78], &__pyx_n_s_NodeId) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[79], &__pyx_n_s_Node_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[80], &__pyx_n_s_Node_List___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[81], &__pyx_n_s_Node_List___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[82], &__pyx_n_s_Node___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[83], &__pyx_n_s_Node___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[84], &__pyx_kp_u_Not_all_prediction_requests_were) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[85], &__pyx_n_s_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[86], &__pyx_n_s_OnlineDefinitionsReader___reduce) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[87], &__pyx_n_s_OnlineDefinitionsReader___setsta) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[88], &__pyx_n_s_OnlineDefinitionsReader_clustere) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[89], &__pyx_n_s_OnlineDefinitionsReader_definiti) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[90], &__pyx_n_s_OnlineDefinitionsReader_local_to) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[91], &__pyx_kp_u_Options_across_files_True_and_sp) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[92], &__pyx_n_s_Original) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[93], &__pyx_kp_u_Out_of_bounds) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[94], &__pyx_n_s_Outcome) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[95], &__pyx_n_s_Outcome_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[96], &__pyx_n_s_Outcome_List___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[97], &__pyx_n_s_Outcome_List___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[98], &__pyx_n_s_Outcome___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[99], &__pyx_n_s_Outcome___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[100], &__pyx_n_s_PIPE) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[101], &__pyx_n_s_Path) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[102], &__pyx_kp_u_Path_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[103], &__pyx_n_s_PredictionProtocol) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[104], &__pyx_n_s_Projection) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[105], &__pyx_n_s_ProofState) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[106], &__pyx_n_s_ProofStateId) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[107], &__pyx_n_s_ProofState_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[108], &__pyx_n_s_ProofState_List___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[109], &__pyx_n_s_ProofState_List___setstate_cytho) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[110], &__pyx_n_s_ProofState___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[111], &__pyx_n_s_ProofState___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[112], &__pyx_n_s_ProofStep) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[113], &__pyx_n_s_ProofStep_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[114], &__pyx_n_s_ProofStep_List___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[115], &__pyx_n_s_ProofStep_List___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[116], &__pyx_n_s_ProofStep___reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[117], &__pyx_n_s_ProofStep___setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[118], &__pyx_n_s_RLIMIT_NOFILE) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[119], &__pyx_n_s_Representative_List) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[120], &__pyx_n_s_Representative_List___reduce_cyt) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[121], &__pyx_n_s_Representative_List___setstate_c) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[122], &__pyx_n_s_Request) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[123], &__pyx_n_s_Response) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[124], &__pyx_n_s_SIGINT) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[125], &__pyx_n_s_SIG_DFL) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[126], &__pyx_n_s_Sequence) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[127], &__pyx_kp_s_Sequence_ProofStep) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[128], &__pyx_kp_u_Servers_response) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[129], &__pyx_kp_u_Squashfuse_error) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[130], &__pyx_n_s_StopIteration) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[131], &__pyx_n_s_Substituted) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[132], &__pyx_n_s_T) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[133], &__pyx_n_u_T) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[134], &__pyx_n_s_TacticId) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[135], &__pyx_n_s_TacticPredictionGraph) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[136], &__pyx_n_s_TacticPredictionText) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[137], &__pyx_n_s_TacticPredictionsGraph) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[138], &__pyx_n_s_TacticPredictionsText) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[139], &__pyx_n_s_TacticalConstant) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[140], &__pyx_n_s_TacticalSectionConstant) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[141], &__pyx_kp_u_The_servers_response_to_a) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[142], &__pyx_kp_u_There_does_not_appear_to_be_a_da) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[143], &__pyx_kp_u_This_library_is_compiled_for_a_d) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[144], &__pyx_n_s_TupleLike) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[145], &__pyx_n_s_TupleLike___getitem) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[146], &__pyx_n_s_TupleLike___init) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[147], &__pyx_n_s_TupleLike___len) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[148], &__pyx_n_s_TypeAlias) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[149], &__pyx_n_s_TypeError) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[150], &__pyx_n_s_TypeVar) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[151], &__pyx_kp_u_Unable_to_mount_dataset) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[152], &__pyx_kp_u_Unable_to_mount_dataset_Executab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[153], &__pyx_kp_u_Unable_to_mount_dataset_Mountpoi) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[154], &__pyx_kp_u_Unable_to_mount_dataset_Squashfu) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[155], &__pyx_n_s_Union) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[156], &__pyx_n_s_Unknown) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[157], &__pyx_n_s_Unresolvable) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[158], &__pyx_n_s_ValueError) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[159], &__pyx_kp_u__10) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[160], &__pyx_n_s__134) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[161], &__pyx_kp_u__25) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[162], &__pyx_n_s__31) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[163], &__pyx_n_s__33) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[164], &__pyx_kp_u__5) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[165], &__pyx_kp_u__6) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[166], &__pyx_kp_u__8) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[167], &__pyx_n_s_a) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[168], &__pyx_n_s_access) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[169], &__pyx_n_s_across_files) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[170], &__pyx_n_s_add) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[171], &__pyx_n_s_alignment) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[172], &__pyx_n_s_annotations) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[173], &__pyx_n_s_apic) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[174], &__pyx_n_s_args) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[175], &__pyx_n_s_arguments) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[176], &__pyx_n_u_arguments) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[177], &__pyx_n_s_as_builder) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[178], &__pyx_n_s_asyncio_coroutines) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[179], &__pyx_n_s_base) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[180], &__pyx_kp_u_bin) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[181], &__pyx_n_s_bool) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[182], &__pyx_kp_u_but_file) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[183], &__pyx_kp_u_but_file_Coq_sent_a_message_ver) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[184], &__pyx_n_s_c) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[185], &__pyx_n_s_cache) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[186], &__pyx_n_s_capnp) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[187], &__pyx_n_s_capnp_message_generator) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[188], &__pyx_n_s_capnp_message_generator_from_fil) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[189], &__pyx_n_s_capnp_message_generator_from_fil_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[190], &__pyx_n_s_capnp_message_generator_lowlevel) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[191], &__pyx_n_s_capnp_message_generator_lowlevel_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[192], &__pyx_n_s_cast) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[193], &__pyx_n_s_check) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[194], &__pyx_n_s_child) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[195], &__pyx_n_s_child_graph) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[196], &__pyx_n_s_children) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[197], &__pyx_n_s_children_index) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[198], &__pyx_n_s_children_limit) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[199], &__pyx_n_s_class_getitem) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[200], &__pyx_n_s_clear_write_flag) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[201], &__pyx_n_s_cline_in_traceback) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[202], &__pyx_n_s_close) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[203], &__pyx_n_s_cls) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[204], &__pyx_n_s_cluster) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[205], &__pyx_n_s_cluster_representative) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[206], &__pyx_n_s_clustered_definitions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[207], &__pyx_n_s_clustered_global_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[208], &__pyx_n_s_collections_abc) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[209], &__pyx_n_s_confidence) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[210], &__pyx_n_u_confidence) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[211], &__pyx_kp_u_contains_data_versioned_as) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[212], &__pyx_n_s_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[213], &__pyx_n_s_contextlib) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[214], &__pyx_n_s_contextmanager) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[215], &__pyx_n_s_convert_predictions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[216], &__pyx_n_s_count) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[217], &__pyx_n_s_count_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[218], &__pyx_n_s_create_mmap) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[219], &__pyx_n_s_currentVersion) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[220], &__pyx_n_s_current_node) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[221], &__pyx_n_s_current_thread) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[222], &__pyx_n_s_cython_msg) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[223], &__pyx_n_s_d) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[224], &__pyx_n_s_data_reader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[225], &__pyx_n_s_data_version) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[226], &__pyx_n_s_dataclass) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[227], &__pyx_n_s_dataclasses) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[228], &__pyx_n_s_dataset) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[229], &__pyx_n_s_dataset_path) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[230], &__pyx_n_s_decode) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[231], &__pyx_n_s_definition) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[232], &__pyx_n_s_definition_dependencies) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[233], &__pyx_n_s_definitions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[234], &__pyx_n_s_definitions_it) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[235], &__pyx_n_s_defs) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[236], &__pyx_n_u_depIndex) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[237], &__pyx_n_s_dep_index) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[238], &__pyx_n_s_dependencies) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[239], &__pyx_n_s_deps) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[240], &__pyx_n_s_dict) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[241], &__pyx_kp_s_dict_Path_Dataset) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[242], &__pyx_kp_u_disable) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[243], &__pyx_n_s_doc) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[244], &__pyx_kp_u_doesn_t_appear_to_be_the_root_o) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[245], &__pyx_n_s_dr) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[246], &__pyx_n_s_edge_target) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[247], &__pyx_n_s_edges) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[248], &__pyx_n_s_empty_online_definitions_initial) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[249], &__pyx_kp_u_enable) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[250], &__pyx_n_s_enter) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[251], &__pyx_n_s_enter_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[252], &__pyx_n_s_enumerate) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[253], &__pyx_n_s_ep) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[254], &__pyx_n_s_eprev) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[255], &__pyx_n_s_exists) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[256], &__pyx_n_s_exit) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[257], &__pyx_n_s_external_previous) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[258], &__pyx_n_s_f) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[259], &__pyx_n_s_file_dataset_reader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[260], &__pyx_n_s_file_dataset_reader_locals_creat) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[261], &__pyx_n_s_fileno) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[262], &__pyx_n_s_float) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[263], &__pyx_n_s_fname) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[264], &__pyx_n_s_fnames) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[265], &__pyx_n_s_from_bytes) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[266], &__pyx_n_s_full) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[267], &__pyx_n_s_g) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[268], &__pyx_kp_u_gc) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[269], &__pyx_n_s_get) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[270], &__pyx_n_s_get_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[271], &__pyx_n_s_getitem) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[272], &__pyx_n_s_getrlimit) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[273], &__pyx_n_s_getstate) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[274], &__pyx_n_s_glob) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[275], &__pyx_n_s_global_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[276], &__pyx_n_s_global_context_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[277], &__pyx_n_s_global_context_set) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[278], &__pyx_n_s_global_context_set_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[279], &__pyx_n_s_graph) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[280], &__pyx_n_s_graph_api_capnp) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[281], &__pyx_n_s_graph_api_capnp_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[282], &__pyx_n_s_graph_index) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[283], &__pyx_n_s_graphid) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[284], &__pyx_n_s_group_by_clusters) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[285], &__pyx_n_s_hard) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[286], &__pyx_n_s_ident) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[287], &__pyx_n_u_ident) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[288], &__pyx_n_s_immutables) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[289], &__pyx_n_s_import) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[290], &__pyx_n_s_inclusive) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[291], &__pyx_n_s_index) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[292], &__pyx_n_s_index_getter) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[293], &__pyx_n_s_index_getter_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[294], &__pyx_n_s_init) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[295], &__pyx_n_s_init_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[296], &__pyx_n_s_init_subclass) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[297], &__pyx_n_s_initialize) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[298], &__pyx_n_s_initialized) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[299], &__pyx_n_s_initializing) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[300], &__pyx_n_s_int) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[301], &__pyx_n_s_is_check_alignment) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[302], &__pyx_n_s_is_coroutine) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[303], &__pyx_n_s_is_dir) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[304], &__pyx_n_s_is_file) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[305], &__pyx_n_s_is_initialize) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[306], &__pyx_n_s_is_mount) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[307], &__pyx_n_s_is_predict) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[308], &__pyx_n_s_is_synchronize) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[309], &__pyx_kp_u_isenabled) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[310], &__pyx_n_s_items) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[311], &__pyx_n_s_itertools) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[312], &__pyx_n_s_kind) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[313], &__pyx_n_s_len) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[314], &__pyx_n_s_length) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[315], &__pyx_n_s_lgenerator) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[316], &__pyx_kp_s_list_Definition) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[317], &__pyx_kp_s_list_Node) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[318], &__pyx_kp_s_list_TacticPredictionsGraph) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[319], &__pyx_kp_s_list_TacticPredictionsText) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[320], &__pyx_kp_s_list_int) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[321], &__pyx_n_s_local_to_global) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[322], &__pyx_n_s_log_annotation) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[323], &__pyx_n_s_lowlevel) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[324], &__pyx_n_s_lowlevel_data_reader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[325], &__pyx_n_s_lowlevel_to_highlevel) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[326], &__pyx_n_s_lreader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[327], &__pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[328], &__pyx_n_s_main_thread) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[329], &__pyx_n_s_major) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[330], &__pyx_n_s_memoryview) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[331], &__pyx_n_s_message_file) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[332], &__pyx_n_s_message_reader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[333], &__pyx_kp_u_message_was_equal_to_the_record) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[334], &__pyx_kp_u_message_was_not_equal_to_the) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[335], &__pyx_n_s_metaclass) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[336], &__pyx_n_s_mm) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[337], &__pyx_n_s_mmap) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[338], &__pyx_n_s_module) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[339], &__pyx_n_s_mountpoint) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[340], &__pyx_n_s_msg) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[341], &__pyx_n_s_mv) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[342], &__pyx_n_s_n) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[343], &__pyx_n_s_name) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[344], &__pyx_n_s_name_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[345], &__pyx_n_s_new_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[346], &__pyx_n_s_new_message) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[347], &__pyx_n_s_new_set) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[348], &__pyx_n_s_new_soft) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[349], &__pyx_n_s_next_disabled_sigint) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[350], &__pyx_kp_s_no_default___reduce___due_to_non) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[351], &__pyx_kp_u_node) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[352], &__pyx_n_u_nodeIndex) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[353], &__pyx_n_s_node_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[354], &__pyx_n_s_node_by_id) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[355], &__pyx_n_s_node_contents) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[356], &__pyx_n_s_node_dependencies) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[357], &__pyx_n_s_node_hash) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[358], &__pyx_n_s_node_label) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[359], &__pyx_n_s_nodeid) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[360], &__pyx_n_s_nodes) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[361], &__pyx_n_s_online_data_predict) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[362], &__pyx_n_s_online_definitions_initialize) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[363], &__pyx_n_s_open) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[364], &__pyx_n_s_original) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[365], &__pyx_n_s_p) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[366], &__pyx_n_s_parent) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[367], &__pyx_n_s_parts) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[368], &__pyx_n_s_pathlib) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[369], &__pyx_n_s_pg) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[370], &__pyx_n_s_pred) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[371], &__pyx_n_s_predict) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[372], &__pyx_n_s_prediction) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[373], &__pyx_n_s_prediction_generator) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[374], &__pyx_n_s_prediction_generator_locals_pred) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[375], &__pyx_n_s_prediction_generator_sub) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[376], &__pyx_n_s_prediction_requests) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[377], &__pyx_n_s_predictions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[378], &__pyx_n_s_preds) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[379], &__pyx_n_s_prepare) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[380], &__pyx_n_s_prev) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[381], &__pyx_n_s_prev_sig) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[382], &__pyx_n_s_previous) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[383], &__pyx_n_s_print) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[384], &__pyx_n_s_proof) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[385], &__pyx_n_s_proof_state) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[386], &__pyx_n_s_propagate) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[387], &__pyx_n_s_propagate_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[388], &__pyx_n_s_pytact) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[389], &__pyx_n_s_pytact_data_reader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[390], &__pyx_kp_s_pytact_data_reader_pyx) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[391], &__pyx_n_s_pytact_graph_api_capnp) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[392], &__pyx_n_s_pytact_graph_api_capnp_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[393], &__pyx_kp_s_pytact_graph_api_capnp_cython_Ab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[394], &__pyx_n_s_pyx_state) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[395], &__pyx_n_s_pyx_vtable) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[396], &__pyx_n_s_qualname) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[397], &__pyx_n_s_range) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[398], &__pyx_n_u_rb) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[399], &__pyx_n_s_read_multiple_packed) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[400], &__pyx_n_s_reader) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[401], &__pyx_n_s_record) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[402], &__pyx_n_s_recorded_response) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[403], &__pyx_kp_u_recorded_response_Recorded_respo) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[404], &__pyx_n_s_reduce) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[405], &__pyx_n_s_reduce_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[406], &__pyx_n_s_reduce_ex) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[407], &__pyx_n_s_relative_to) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[408], &__pyx_n_s_rep) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[409], &__pyx_n_s_representative) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[410], &__pyx_n_s_representatives) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[411], &__pyx_n_s_request) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[412], &__pyx_n_s_resource) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[413], &__pyx_n_s_response) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[414], &__pyx_n_s_result) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[415], &__pyx_n_s_return) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[416], &__pyx_n_s_returncode) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[417], &__pyx_n_s_reversed) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[418], &__pyx_n_s_run) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[419], &__pyx_n_s_schema) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[420], &__pyx_n_s_seen) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[421], &__pyx_n_s_self) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[422], &__pyx_kp_s_self_edges_self_graph_index_cann) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[423], &__pyx_kp_s_self_graph_index_cannot_be_conve) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[424], &__pyx_kp_s_self_graph_index_self_node_canno) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[425], &__pyx_kp_s_self_graph_index_self_reader_can) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[426], &__pyx_n_s_send) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[427], &__pyx_n_s_set) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[428], &__pyx_kp_s_set_Definition) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[429], &__pyx_kp_s_set_Definition_None) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[430], &__pyx_kp_s_set_Node) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[431], &__pyx_n_s_set_name) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[432], &__pyx_n_s_setrlimit) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[433], &__pyx_n_s_setstate) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[434], &__pyx_n_s_setstate_cython) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[435], &__pyx_n_s_setup_dataset) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[436], &__pyx_n_s_should_propagate) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[437], &__pyx_n_s_shutil) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[438], &__pyx_n_s_signal) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[439], &__pyx_n_s_size) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[440], &__pyx_n_s_sleep) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[441], &__pyx_n_s_socket) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[442], &__pyx_kp_s_socket_socket) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[443], &__pyx_n_s_soft) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[444], &__pyx_n_s_spec) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[445], &__pyx_n_s_spine_only) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[446], &__pyx_n_u_squashfuse) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[447], &__pyx_n_s_stack) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[448], &__pyx_n_s_stack_size) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[449], &__pyx_n_s_start) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[450], &__pyx_n_s_staticmethod) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[451], &__pyx_n_s_stderr) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[452], &__pyx_n_s_stdout) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[453], &__pyx_n_s_str) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[454], &__pyx_kp_s_stringsource) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[455], &__pyx_n_s_sub_context) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[456], &__pyx_n_s_subprocess) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[457], &__pyx_kp_u_suggests_that_the_real_root_mig) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[458], &__pyx_n_s_super) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[459], &__pyx_n_s_synchronize) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[460], &__pyx_n_s_synchronized) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[461], &__pyx_n_s_tactic) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[462], &__pyx_n_u_tactic) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[463], &__pyx_n_u_tacticText) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[464], &__pyx_n_s_tactic_text) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[465], &__pyx_n_s_tactics) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[466], &__pyx_n_s_temp) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[467], &__pyx_n_u_term) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[468], &__pyx_n_s_test) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[469], &__pyx_n_s_text) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[470], &__pyx_n_s_textPrediction) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[471], &__pyx_n_s_threading) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[472], &__pyx_n_s_throw) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[473], &__pyx_n_s_time) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[474], &__pyx_n_s_to_dict) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[475], &__pyx_n_s_traversal_limit_in_words) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[476], &__pyx_n_s_typing) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[477], &__pyx_n_u_unalignedDefinitions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[478], &__pyx_n_u_unalignedTactics) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[479], &__pyx_n_s_unknown_definitions) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[480], &__pyx_n_s_unknown_tactics) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[481], &__pyx_n_s_update) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[482], &__pyx_n_s_which) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[483], &__pyx_n_s_with_suffix) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  if (__Pyx_InitString(__pyx_string_tab[484], &__pyx_n_s_write_packed) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  #endif
  #if !CYTHON_USE_MODULE_STATE
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  #endif
  __pyx_float_0_01 = PyFloat_FromDouble(0.01); if (unlikely(!__pyx_float_0_01)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_18446744073709551615 = PyInt_FromString((char *)"18446744073709551615", 0, 0); if (unlikely(!__pyx_int_18446744073709551615)) __PYX_ERR(0, 1, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: init_globals ### */

static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
  return 0;
}
/* #### Code section: init_module ### */

static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/

static int __Pyx_modinit_global_init_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
  /*--- Global init code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_type_init_code(void) {
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
  /*--- Type init code ---*/
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_LowlevelDataReader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_LowlevelDataReader_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_LowlevelDataReader)) __PYX_ERR(0, 145, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_LowlevelDataReader_spec, __pyx_ptype_6pytact_11data_reader_LowlevelDataReader) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_LowlevelDataReader = &__pyx_type_6pytact_11data_reader_LowlevelDataReader;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_LowlevelDataReader) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_LowlevelDataReader->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_LowlevelDataReader->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_LowlevelDataReader->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_LowlevelDataReader->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_6pytact_11data_reader_LowlevelDataReader, "__getitem__"); if (unlikely(!wrapper)) __PYX_ERR(0, 145, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_6pytact_11data_reader_18LowlevelDataReader_4__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_6pytact_11data_reader_18LowlevelDataReader_4__getitem__.doc = __pyx_doc_6pytact_11data_reader_18LowlevelDataReader_4__getitem__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6pytact_11data_reader_18LowlevelDataReader_4__getitem__;
    }
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_LowlevelDataReader, (PyObject *) __pyx_ptype_6pytact_11data_reader_LowlevelDataReader) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_LowlevelDataReader) < 0) __PYX_ERR(0, 145, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Node = &__pyx_vtable_6pytact_11data_reader_Node;
  __pyx_vtable_6pytact_11data_reader_Node.init = (PyObject *(*)(__pyx_t_6pytact_11data_reader_GraphId, int, struct __pyx_t_6pytact_11data_reader_GraphIndex *))__pyx_f_6pytact_11data_reader_4Node_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Node = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Node_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Node)) __PYX_ERR(0, 293, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Node_spec, __pyx_ptype_6pytact_11data_reader_Node) < 0) __PYX_ERR(0, 293, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Node = &__pyx_type_6pytact_11data_reader_Node;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Node) < 0) __PYX_ERR(0, 293, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Node->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Node->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Node->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Node->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_6pytact_11data_reader_Node, "__eq__"); if (unlikely(!wrapper)) __PYX_ERR(0, 293, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_6pytact_11data_reader_4Node_2__eq__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_6pytact_11data_reader_4Node_2__eq__.doc = __pyx_doc_6pytact_11data_reader_4Node_2__eq__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6pytact_11data_reader_4Node_2__eq__;
    }
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_6pytact_11data_reader_Node, "__hash__"); if (unlikely(!wrapper)) __PYX_ERR(0, 293, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_6pytact_11data_reader_4Node_4__hash__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_6pytact_11data_reader_4Node_4__hash__.doc = __pyx_doc_6pytact_11data_reader_4Node_4__hash__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6pytact_11data_reader_4Node_4__hash__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Node, __pyx_vtabptr_6pytact_11data_reader_Node) < 0) __PYX_ERR(0, 293, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Node) < 0) __PYX_ERR(0, 293, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Node, (PyObject *) __pyx_ptype_6pytact_11data_reader_Node) < 0) __PYX_ERR(0, 293, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Node) < 0) __PYX_ERR(0, 293, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_EdgeTarget_List = &__pyx_vtable_6pytact_11data_reader_EdgeTarget_List;
  __pyx_vtable_6pytact_11data_reader_EdgeTarget_List.init = (PyObject *(*)( ::capnp::List<Graph::EdgeTarget, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId, uint32_t, uint16_t))__pyx_f_6pytact_11data_reader_15EdgeTarget_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_EdgeTarget_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_EdgeTarget_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_EdgeTarget_List)) __PYX_ERR(0, 391, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_EdgeTarget_List_spec, __pyx_ptype_6pytact_11data_reader_EdgeTarget_List) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_EdgeTarget_List = &__pyx_type_6pytact_11data_reader_EdgeTarget_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_EdgeTarget_List) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_EdgeTarget_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_EdgeTarget_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_EdgeTarget_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_EdgeTarget_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_EdgeTarget_List, __pyx_vtabptr_6pytact_11data_reader_EdgeTarget_List) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_EdgeTarget_List) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_EdgeTarget_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_EdgeTarget_List) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_EdgeTarget_List) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Node_List = &__pyx_vtable_6pytact_11data_reader_Node_List;
  __pyx_vtable_6pytact_11data_reader_Node_List.init = (PyObject *(*)( ::capnp::List<Node, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId))__pyx_f_6pytact_11data_reader_9Node_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Node_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Node_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Node_List)) __PYX_ERR(0, 422, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Node_List_spec, __pyx_ptype_6pytact_11data_reader_Node_List) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Node_List = &__pyx_type_6pytact_11data_reader_Node_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Node_List) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Node_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Node_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Node_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Node_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Node_List, __pyx_vtabptr_6pytact_11data_reader_Node_List) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Node_List) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Node_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_Node_List) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Node_List) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_ProofState = &__pyx_vtable_6pytact_11data_reader_ProofState;
  __pyx_vtable_6pytact_11data_reader_ProofState.init = (PyObject *(*)(ProofState::Reader, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *))__pyx_f_6pytact_11data_reader_10ProofState_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_ProofState = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_ProofState_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_ProofState)) __PYX_ERR(0, 447, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_ProofState_spec, __pyx_ptype_6pytact_11data_reader_ProofState) < 0) __PYX_ERR(0, 447, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_ProofState = &__pyx_type_6pytact_11data_reader_ProofState;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_ProofState) < 0) __PYX_ERR(0, 447, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_ProofState->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_ProofState->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_ProofState->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_ProofState->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_ProofState, __pyx_vtabptr_6pytact_11data_reader_ProofState) < 0) __PYX_ERR(0, 447, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_ProofState) < 0) __PYX_ERR(0, 447, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ProofState, (PyObject *) __pyx_ptype_6pytact_11data_reader_ProofState) < 0) __PYX_ERR(0, 447, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_ProofState) < 0) __PYX_ERR(0, 447, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_ProofState_List = &__pyx_vtable_6pytact_11data_reader_ProofState_List;
  __pyx_vtable_6pytact_11data_reader_ProofState_List.init = (PyObject *(*)( ::capnp::List<ProofState, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId))__pyx_f_6pytact_11data_reader_15ProofState_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_ProofState_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_ProofState_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_ProofState_List)) __PYX_ERR(0, 534, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_ProofState_List_spec, __pyx_ptype_6pytact_11data_reader_ProofState_List) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_ProofState_List = &__pyx_type_6pytact_11data_reader_ProofState_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_ProofState_List) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_ProofState_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_ProofState_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_ProofState_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_ProofState_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_ProofState_List, __pyx_vtabptr_6pytact_11data_reader_ProofState_List) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_ProofState_List) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ProofState_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_ProofState_List) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_ProofState_List) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Argument_List = &__pyx_vtable_6pytact_11data_reader_Argument_List;
  __pyx_vtable_6pytact_11data_reader_Argument_List.init = (PyObject *(*)( ::capnp::List<Argument, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId))__pyx_f_6pytact_11data_reader_13Argument_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Argument_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Argument_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Argument_List)) __PYX_ERR(0, 556, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Argument_List_spec, __pyx_ptype_6pytact_11data_reader_Argument_List) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Argument_List = &__pyx_type_6pytact_11data_reader_Argument_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Argument_List) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Argument_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Argument_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Argument_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Argument_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Argument_List, __pyx_vtabptr_6pytact_11data_reader_Argument_List) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Argument_List) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Argument_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_Argument_List) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Argument_List) < 0) __PYX_ERR(0, 556, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Outcome = &__pyx_vtable_6pytact_11data_reader_Outcome;
  __pyx_vtable_6pytact_11data_reader_Outcome.init = (PyObject *(*)(Outcome::Reader, PyObject *, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *))__pyx_f_6pytact_11data_reader_7Outcome_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Outcome = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Outcome_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Outcome)) __PYX_ERR(0, 588, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Outcome_spec, __pyx_ptype_6pytact_11data_reader_Outcome) < 0) __PYX_ERR(0, 588, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Outcome = &__pyx_type_6pytact_11data_reader_Outcome;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Outcome) < 0) __PYX_ERR(0, 588, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Outcome->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Outcome->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Outcome->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Outcome->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Outcome, __pyx_vtabptr_6pytact_11data_reader_Outcome) < 0) __PYX_ERR(0, 588, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Outcome) < 0) __PYX_ERR(0, 588, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Outcome, (PyObject *) __pyx_ptype_6pytact_11data_reader_Outcome) < 0) __PYX_ERR(0, 588, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Outcome) < 0) __PYX_ERR(0, 588, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Outcome_List = &__pyx_vtable_6pytact_11data_reader_Outcome_List;
  __pyx_vtable_6pytact_11data_reader_Outcome_List.init = (PyObject *(*)( ::capnp::List<Outcome, ::capnp::Kind::STRUCT>::Reader, PyObject *, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId))__pyx_f_6pytact_11data_reader_12Outcome_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Outcome_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Outcome_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Outcome_List)) __PYX_ERR(0, 655, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Outcome_List_spec, __pyx_ptype_6pytact_11data_reader_Outcome_List) < 0) __PYX_ERR(0, 655, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Outcome_List = &__pyx_type_6pytact_11data_reader_Outcome_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Outcome_List) < 0) __PYX_ERR(0, 655, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Outcome_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Outcome_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Outcome_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Outcome_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Outcome_List, __pyx_vtabptr_6pytact_11data_reader_Outcome_List) < 0) __PYX_ERR(0, 655, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Outcome_List) < 0) __PYX_ERR(0, 655, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Outcome_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_Outcome_List) < 0) __PYX_ERR(0, 655, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Outcome_List) < 0) __PYX_ERR(0, 655, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_ProofStep = &__pyx_vtable_6pytact_11data_reader_ProofStep;
  __pyx_vtable_6pytact_11data_reader_ProofStep.init = (PyObject *(*)(ProofStep::Reader, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *))__pyx_f_6pytact_11data_reader_9ProofStep_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_ProofStep = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_ProofStep_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_ProofStep)) __PYX_ERR(0, 679, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_ProofStep_spec, __pyx_ptype_6pytact_11data_reader_ProofStep) < 0) __PYX_ERR(0, 679, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_ProofStep = &__pyx_type_6pytact_11data_reader_ProofStep;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_ProofStep) < 0) __PYX_ERR(0, 679, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_ProofStep->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_ProofStep->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_ProofStep->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_ProofStep->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_ProofStep, __pyx_vtabptr_6pytact_11data_reader_ProofStep) < 0) __PYX_ERR(0, 679, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_ProofStep) < 0) __PYX_ERR(0, 679, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ProofStep, (PyObject *) __pyx_ptype_6pytact_11data_reader_ProofStep) < 0) __PYX_ERR(0, 679, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_ProofStep) < 0) __PYX_ERR(0, 679, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_ProofStep_List = &__pyx_vtable_6pytact_11data_reader_ProofStep_List;
  __pyx_vtable_6pytact_11data_reader_ProofStep_List.init = (PyObject *(*)( ::capnp::List<ProofStep, ::capnp::Kind::STRUCT>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId))__pyx_f_6pytact_11data_reader_14ProofStep_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_ProofStep_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_ProofStep_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_ProofStep_List)) __PYX_ERR(0, 724, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_ProofStep_List_spec, __pyx_ptype_6pytact_11data_reader_ProofStep_List) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_ProofStep_List = &__pyx_type_6pytact_11data_reader_ProofStep_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_ProofStep_List) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_ProofStep_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_ProofStep_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_ProofStep_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_ProofStep_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_ProofStep_List, __pyx_vtabptr_6pytact_11data_reader_ProofStep_List) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_ProofStep_List) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ProofStep_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_ProofStep_List) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_ProofStep_List) < 0) __PYX_ERR(0, 724, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Representative_List = &__pyx_vtable_6pytact_11data_reader_Representative_List;
  __pyx_vtable_6pytact_11data_reader_Representative_List.init = (PyObject *(*)( ::capnp::List<uint16_t, ::capnp::Kind::PRIMITIVE>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId))__pyx_f_6pytact_11data_reader_19Representative_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Representative_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Representative_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Representative_List)) __PYX_ERR(0, 746, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Representative_List_spec, __pyx_ptype_6pytact_11data_reader_Representative_List) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Representative_List = &__pyx_type_6pytact_11data_reader_Representative_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Representative_List) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Representative_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Representative_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Representative_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Representative_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Representative_List, __pyx_vtabptr_6pytact_11data_reader_Representative_List) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Representative_List) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Representative_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_Representative_List) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Representative_List) < 0) __PYX_ERR(0, 746, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Definition = &__pyx_vtable_6pytact_11data_reader_Definition;
  __pyx_vtable_6pytact_11data_reader_Definition.init = (PyObject *(*)(struct __pyx_obj_6pytact_11data_reader_Node *, Definition::Reader, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_t_6pytact_11data_reader_GraphIndex *))__pyx_f_6pytact_11data_reader_10Definition_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Definition = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Definition_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Definition)) __PYX_ERR(0, 801, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Definition_spec, __pyx_ptype_6pytact_11data_reader_Definition) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Definition = &__pyx_type_6pytact_11data_reader_Definition;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Definition) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Definition->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Definition->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Definition->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Definition->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition, "__eq__"); if (unlikely(!wrapper)) __PYX_ERR(0, 801, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_6pytact_11data_reader_10Definition_2__eq__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_6pytact_11data_reader_10Definition_2__eq__.doc = __pyx_doc_6pytact_11data_reader_10Definition_2__eq__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6pytact_11data_reader_10Definition_2__eq__;
    }
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition, "__hash__"); if (unlikely(!wrapper)) __PYX_ERR(0, 801, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_6pytact_11data_reader_10Definition_4__hash__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_6pytact_11data_reader_10Definition_4__hash__.doc = __pyx_doc_6pytact_11data_reader_10Definition_4__hash__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_6pytact_11data_reader_10Definition_4__hash__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Definition, __pyx_vtabptr_6pytact_11data_reader_Definition) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Definition) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Definition, (PyObject *) __pyx_ptype_6pytact_11data_reader_Definition) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Definition) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Dataset_Definition_List = &__pyx_vtable_6pytact_11data_reader_Dataset_Definition_List;
  __pyx_vtable_6pytact_11data_reader_Dataset_Definition_List.init = (PyObject *(*)( ::capnp::List<uint32_t, ::capnp::Kind::PRIMITIVE>::Reader, struct __pyx_t_6pytact_11data_reader_GraphIndex *, __pyx_t_6pytact_11data_reader_GraphId))__pyx_f_6pytact_11data_reader_23Dataset_Definition_List_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Dataset_Definition_List_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List)) __PYX_ERR(0, 1074, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Dataset_Definition_List_spec, __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List) < 0) __PYX_ERR(0, 1074, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List = &__pyx_type_6pytact_11data_reader_Dataset_Definition_List;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List) < 0) __PYX_ERR(0, 1074, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List, __pyx_vtabptr_6pytact_11data_reader_Dataset_Definition_List) < 0) __PYX_ERR(0, 1074, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Dataset_Definition_List) < 0) __PYX_ERR(0, 1074, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Dataset_Definition_List, (PyObject *) __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List) < 0) __PYX_ERR(0, 1074, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Dataset_Definition_List) < 0) __PYX_ERR(0, 1074, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_Dataset = &__pyx_vtable_6pytact_11data_reader_Dataset;
  __pyx_vtable_6pytact_11data_reader_Dataset.init = (PyObject *(*)(PyObject *, __pyx_t_6pytact_11data_reader_GraphId, struct __pyx_obj_6pytact_11data_reader_LowlevelDataReader *))__pyx_f_6pytact_11data_reader_7Dataset_init;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_Dataset = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_Dataset_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_Dataset)) __PYX_ERR(0, 1096, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_Dataset_spec, __pyx_ptype_6pytact_11data_reader_Dataset) < 0) __PYX_ERR(0, 1096, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_Dataset = &__pyx_type_6pytact_11data_reader_Dataset;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_Dataset) < 0) __PYX_ERR(0, 1096, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_Dataset->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_Dataset->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_Dataset->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_Dataset->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_Dataset, __pyx_vtabptr_6pytact_11data_reader_Dataset) < 0) __PYX_ERR(0, 1096, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_Dataset) < 0) __PYX_ERR(0, 1096, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Dataset, (PyObject *) __pyx_ptype_6pytact_11data_reader_Dataset) < 0) __PYX_ERR(0, 1096, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_Dataset) < 0) __PYX_ERR(0, 1096, __pyx_L1_error)
  #endif
  __pyx_vtabptr_6pytact_11data_reader_OnlineDefinitionsReader = &__pyx_vtable_6pytact_11data_reader_OnlineDefinitionsReader;
  __pyx_vtable_6pytact_11data_reader_OnlineDefinitionsReader.init = (PyObject *(*)(struct __pyx_t_6pytact_11data_reader_GraphIndex, PredictionProtocol::Request::Initialize::Reader))__pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init;
  __pyx_vtable_6pytact_11data_reader_OnlineDefinitionsReader.init_empty = (PyObject *(*)(void))__pyx_f_6pytact_11data_reader_23OnlineDefinitionsReader_init_empty;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader_OnlineDefinitionsReader_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader)) __PYX_ERR(0, 1226, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader_OnlineDefinitionsReader_spec, __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader = &__pyx_type_6pytact_11data_reader_OnlineDefinitionsReader;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader->tp_dictoffset && __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader->tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader, __pyx_vtabptr_6pytact_11data_reader_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_MergeVtables(__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_OnlineDefinitionsReader, (PyObject *) __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1226, __pyx_L1_error)
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader)) __PYX_ERR(0, 122, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader = &__pyx_type_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct__file_dataset_reader->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader)) __PYX_ERR(0, 248, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader) < 0) __PYX_ERR(0, 248, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader) < 0) __PYX_ERR(0, 248, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_1_lowlevel_data_reader->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context)) __PYX_ERR(0, 875, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context) < 0) __PYX_ERR(0, 875, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_2__global_context;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context) < 0) __PYX_ERR(0, 875, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_2__global_context->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__ = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get___spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__)) __PYX_ERR(0, 1018, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get___spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__) < 0) __PYX_ERR(0, 1018, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__ = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_3___get__;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__) < 0) __PYX_ERR(0, 1018, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_3___get__->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters)) __PYX_ERR(0, 1057, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters) < 0) __PYX_ERR(0, 1057, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters) < 0) __PYX_ERR(0, 1057, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_4__group_by_clusters->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__ = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get___spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__)) __PYX_ERR(0, 1122, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get___spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__) < 0) __PYX_ERR(0, 1122, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__ = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_5___get__;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__) < 0) __PYX_ERR(0, 1122, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_5___get__->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader)) __PYX_ERR(0, 1212, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader) < 0) __PYX_ERR(0, 1212, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_6_data_reader;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader) < 0) __PYX_ERR(0, 1212, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_6_data_reader->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize)) __PYX_ERR(0, 1304, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize) < 0) __PYX_ERR(0, 1304, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize) < 0) __PYX_ERR(0, 1304, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_7_online_definitions_initialize->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict)) __PYX_ERR(0, 1325, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict) < 0) __PYX_ERR(0, 1325, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict) < 0) __PYX_ERR(0, 1325, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_8_online_data_predict->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel)) __PYX_ERR(0, 1399, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_9_capnp_message_generator_lowlevel->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel)) __PYX_ERR(0, 1444, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel) < 0) __PYX_ERR(0, 1444, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel) < 0) __PYX_ERR(0, 1444, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_10_capnp_message_generator_from_file_lowlevel->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator)) __PYX_ERR(0, 1483, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator) < 0) __PYX_ERR(0, 1483, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator) < 0) __PYX_ERR(0, 1483, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_11_prediction_generator->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub)) __PYX_ERR(0, 1503, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub) < 0) __PYX_ERR(0, 1503, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub) < 0) __PYX_ERR(0, 1503, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_12_prediction_generator_sub->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context)) __PYX_ERR(0, 1631, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_13_sub_context;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_13_sub_context->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context_spec, NULL); if (unlikely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context)) __PYX_ERR(0, 1640, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context_spec, __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context) < 0) __PYX_ERR(0, 1640, __pyx_L1_error)
  #else
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context = &__pyx_type_6pytact_11data_reader___pyx_scope_struct_14_new_context;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context) < 0) __PYX_ERR(0, 1640, __pyx_L1_error)
  #endif
  #if PY_MAJOR_VERSION < 3
  __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context->tp_print = 0;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context->tp_dictoffset && __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_ptype_6pytact_11data_reader___pyx_scope_struct_14_new_context->tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  #endif
  __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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
  /*--- Type import code ---*/
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", 
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT(PyTypeObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT(PyTypeObject),
  #else
  sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT(PyHeapTypeObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("capnp.lib.capnp"); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5capnp_3lib_5capnp__StructSchemaField = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_StructSchemaField", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__StructSchemaField),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__StructSchemaField) __PYX_ERR(3, 23, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__StructSchemaField = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__StructSchemaField*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__StructSchemaField); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__StructSchemaField)) __PYX_ERR(3, 23, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_StringArrayPtr", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__StringArrayPtr), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__StringArrayPtr),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr) __PYX_ERR(3, 28, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__StringArrayPtr = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__StringArrayPtr*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__StringArrayPtr); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__StringArrayPtr)) __PYX_ERR(3, 28, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp_SchemaParser = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "SchemaParser", sizeof(struct __pyx_obj_5capnp_3lib_5capnp_SchemaParser), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp_SchemaParser),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp_SchemaParser) __PYX_ERR(3, 34, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp_SchemaParser = (struct __pyx_vtabstruct_5capnp_3lib_5capnp_SchemaParser*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp_SchemaParser); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp_SchemaParser)) __PYX_ERR(3, 34, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_DynamicOrphan", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__DynamicOrphan),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan) __PYX_ERR(3, 41, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__DynamicOrphan = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicOrphan*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__DynamicOrphan); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__DynamicOrphan)) __PYX_ERR(3, 41, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_DynamicStructReader", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructReader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader) __PYX_ERR(3, 51, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__DynamicStructReader = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructReader*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__DynamicStructReader); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__DynamicStructReader)) __PYX_ERR(3, 51, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_DynamicStructBuilder", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__DynamicStructBuilder),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder) __PYX_ERR(3, 70, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__DynamicStructBuilder = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicStructBuilder*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__DynamicStructBuilder); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__DynamicStructBuilder)) __PYX_ERR(3, 70, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_DynamicEnumField", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnumField),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField) __PYX_ERR(3, 102, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__DynamicEnumField = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnumField*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__DynamicEnumField); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__DynamicEnumField)) __PYX_ERR(3, 102, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__Schema = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_Schema", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__Schema), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__Schema),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__Schema) __PYX_ERR(3, 108, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__Schema = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__Schema*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__Schema); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__Schema)) __PYX_ERR(3, 108, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_InterfaceSchema", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__InterfaceSchema), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__InterfaceSchema),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema) __PYX_ERR(3, 119, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__InterfaceSchema = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__InterfaceSchema*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__InterfaceSchema); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__InterfaceSchema)) __PYX_ERR(3, 119, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__DynamicEnum = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_DynamicEnum", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnum), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__DynamicEnum),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__DynamicEnum) __PYX_ERR(3, 124, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__DynamicEnum = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicEnum*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__DynamicEnum); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__DynamicEnum)) __PYX_ERR(3, 124, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_DynamicListBuilder", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__DynamicListBuilder),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder) __PYX_ERR(3, 131, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__DynamicListBuilder = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__DynamicListBuilder*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__DynamicListBuilder); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__DynamicListBuilder)) __PYX_ERR(3, 131, __pyx_L1_error)
  __pyx_ptype_5capnp_3lib_5capnp__MessageBuilder = __Pyx_ImportType(__pyx_t_1, "capnp.lib.capnp", "_MessageBuilder", sizeof(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_5capnp_3lib_5capnp__MessageBuilder),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5capnp_3lib_5capnp__MessageBuilder) __PYX_ERR(3, 144, __pyx_L1_error)
  __pyx_vtabptr_5capnp_3lib_5capnp__MessageBuilder = (struct __pyx_vtabstruct_5capnp_3lib_5capnp__MessageBuilder*)__Pyx_GetVtable(__pyx_ptype_5capnp_3lib_5capnp__MessageBuilder); if (unlikely(!__pyx_vtabptr_5capnp_3lib_5capnp__MessageBuilder)) __PYX_ERR(3, 144, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("pytact.graph_api_capnp_cython"); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Graph_Node_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader) __PYX_ERR(4, 561, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Reader)) __PYX_ERR(4, 561, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Graph_EdgeTarget_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader) __PYX_ERR(4, 567, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader)) __PYX_ERR(4, 567, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Graph_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader) __PYX_ERR(4, 573, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Reader)) __PYX_ERR(4, 573, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "IntP_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_IntP_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_IntP_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader) __PYX_ERR(4, 579, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_IntP_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_IntP_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_IntP_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_IntP_Reader)) __PYX_ERR(4, 579, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Definition_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader) __PYX_ERR(4, 585, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Reader)) __PYX_ERR(4, 585, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "FloatP_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_FloatP_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_FloatP_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader) __PYX_ERR(4, 591, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_FloatP_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_FloatP_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_FloatP_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_FloatP_Reader)) __PYX_ERR(4, 591, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Graph_Node_Label_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader) __PYX_ERR(4, 597, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Label_Reader)) __PYX_ERR(4, 597, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Definition_Status_Substituted_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader) __PYX_ERR(4, 603, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Status_Substituted_Reader)) __PYX_ERR(4, 603, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Definition_Status_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Definition_Status_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader) __PYX_ERR(4, 609, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Status_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Definition_Status_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Definition_Status_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Definition_Status_Reader)) __PYX_ERR(4, 609, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ProofStep_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader) __PYX_ERR(4, 615, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Reader)) __PYX_ERR(4, 615, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Tactic_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Tactic_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Tactic_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader) __PYX_ERR(4, 621, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Tactic_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Tactic_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Tactic_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Tactic_Reader)) __PYX_ERR(4, 621, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ProofStep_Tactic_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader) __PYX_ERR(4, 627, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Tactic_Reader)) __PYX_ERR(4, 627, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Outcome_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader) __PYX_ERR(4, 633, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Reader)) __PYX_ERR(4, 633, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Outcome_Term_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader) __PYX_ERR(4, 639, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Term_Reader)) __PYX_ERR(4, 639, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ProofState_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader) __PYX_ERR(4, 645, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Reader)) __PYX_ERR(4, 645, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Argument_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader) __PYX_ERR(4, 651, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Reader)) __PYX_ERR(4, 651, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ProofState_Root_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader) __PYX_ERR(4, 657, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Root_Reader)) __PYX_ERR(4, 657, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Node_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader) __PYX_ERR(4, 663, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Node_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Node_Reader)) __PYX_ERR(4, 663, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Argument_Term_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Term_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Term_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader) __PYX_ERR(4, 669, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Term_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Term_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Term_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Term_Reader)) __PYX_ERR(4, 669, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Graph_EdgeTarget_Target_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader) __PYX_ERR(4, 675, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Target_Reader)) __PYX_ERR(4, 675, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "AbstractTactic_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader) __PYX_ERR(4, 681, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader)) __PYX_ERR(4, 681, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "DataVersion_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_DataVersion_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_DataVersion_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader) __PYX_ERR(4, 687, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_DataVersion_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_DataVersion_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_DataVersion_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_DataVersion_Reader)) __PYX_ERR(4, 687, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Dataset_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Dataset_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Dataset_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader) __PYX_ERR(4, 693, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Dataset_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Dataset_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Dataset_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Dataset_Reader)) __PYX_ERR(4, 693, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Exception_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Exception_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Exception_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader) __PYX_ERR(4, 699, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Exception_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Exception_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Exception_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Exception_Reader)) __PYX_ERR(4, 699, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ExecutionResult_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader) __PYX_ERR(4, 705, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ExecutionResult_Reader)) __PYX_ERR(4, 705, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ExecutionResult_NewState_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader) __PYX_ERR(4, 711, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ExecutionResult_NewState_Reader)) __PYX_ERR(4, 711, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader) __PYX_ERR(4, 717, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Reader)) __PYX_ERR(4, 717, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Request_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader) __PYX_ERR(4, 723, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Reader)) __PYX_ERR(4, 723, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Request_Initialize_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader) __PYX_ERR(4, 729, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Initialize_Reader)) __PYX_ERR(4, 729, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Request_Predict_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader) __PYX_ERR(4, 735, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Request_Predict_Reader)) __PYX_ERR(4, 735, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Prediction_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader) __PYX_ERR(4, 741, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader)) __PYX_ERR(4, 741, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_TextPrediction_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader) __PYX_ERR(4, 747, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader)) __PYX_ERR(4, 747, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Response_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader) __PYX_ERR(4, 753, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Reader)) __PYX_ERR(4, 753, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Response_Alignment_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader) __PYX_ERR(4, 759, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Response_Alignment_Reader)) __PYX_ERR(4, 759, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ConflatableEdges_Reader", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader) __PYX_ERR(4, 765, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ConflatableEdges_Reader)) __PYX_ERR(4, 765, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Uint16_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint16_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint16_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List) __PYX_ERR(4, 771, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint16_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint16_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint16_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint16_List)) __PYX_ERR(4, 771, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Uint32_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint32_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint32_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List) __PYX_ERR(4, 777, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint32_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint32_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint32_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint32_List)) __PYX_ERR(4, 777, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Uint64_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint64_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Uint64_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List) __PYX_ERR(4, 783, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint64_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Uint64_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Uint64_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Uint64_List)) __PYX_ERR(4, 783, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Int64_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Int64_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Int64_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List) __PYX_ERR(4, 789, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Int64_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Int64_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Int64_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Int64_List)) __PYX_ERR(4, 789, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_String_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "String_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_String_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_String_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_String_List) __PYX_ERR(4, 795, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_String_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_String_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_String_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_String_List)) __PYX_ERR(4, 795, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_Prediction_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List) __PYX_ERR(4, 800, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_Prediction_Reader_List)) __PYX_ERR(4, 800, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Graph_Node_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List) __PYX_ERR(4, 805, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_Node_Reader_List)) __PYX_ERR(4, 805, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "AbstractTactic_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List) __PYX_ERR(4, 810, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_AbstractTactic_Reader_List)) __PYX_ERR(4, 810, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ProofStep_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List) __PYX_ERR(4, 815, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofStep_Reader_List)) __PYX_ERR(4, 815, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "PredictionProtocol_TextPrediction_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List) __PYX_ERR(4, 820, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_PredictionProtocol_TextPrediction_Reader_List)) __PYX_ERR(4, 820, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "ProofState_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_ProofState_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List) __PYX_ERR(4, 825, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_ProofState_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_ProofState_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_ProofState_Reader_List)) __PYX_ERR(4, 825, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Graph_EdgeTarget_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List) __PYX_ERR(4, 830, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Graph_EdgeTarget_Reader_List)) __PYX_ERR(4, 830, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Argument_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Argument_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List) __PYX_ERR(4, 835, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Argument_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Argument_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Argument_Reader_List)) __PYX_ERR(4, 835, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Outcome_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Outcome_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List) __PYX_ERR(4, 840, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Outcome_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Outcome_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Outcome_Reader_List)) __PYX_ERR(4, 840, __pyx_L1_error)
  __pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List = __Pyx_ImportType(__pyx_t_1, "pytact.graph_api_capnp_cython", "Node_Reader_List", sizeof(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader_List), __PYX_GET_STRUCT_ALIGNMENT(struct __pyx_obj_6pytact_22graph_api_capnp_cython_Node_Reader_List),
  __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List) __PYX_ERR(4, 845, __pyx_L1_error)
  __pyx_vtabptr_6pytact_22graph_api_capnp_cython_Node_Reader_List = (struct __pyx_vtabstruct_6pytact_22graph_api_capnp_cython_Node_Reader_List*)__Pyx_GetVtable(__pyx_ptype_6pytact_22graph_api_capnp_cython_Node_Reader_List); if (unlikely(!__pyx_vtabptr_6pytact_22graph_api_capnp_cython_Node_Reader_List)) __PYX_ERR(4, 845, __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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  __pyx_t_1 = PyImport_ImportModule("capnp.lib.capnp"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_ImportFunction(__pyx_t_1, "to_python_reader", (void (**)(void))&__pyx_f_5capnp_3lib_5capnp_to_python_reader, "PyObject *( ::capnp::DynamicValue::Reader, PyObject *)") < 0) __PYX_ERR(0, 1, __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;
}


#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_data_reader(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec_data_reader},
  {0, NULL}
};
#endif

#ifdef __cplusplus
namespace {
  struct PyModuleDef __pyx_moduledef =
  #else
  static struct PyModuleDef __pyx_moduledef =
  #endif
  {
      PyModuleDef_HEAD_INIT,
      "data_reader",
      __pyx_k_This_module_provides_read_access, /* m_doc */
    #if CYTHON_PEP489_MULTI_PHASE_INIT
      0, /* m_size */
    #elif CYTHON_USE_MODULE_STATE
      sizeof(__pyx_mstate), /* 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
    #if CYTHON_USE_MODULE_STATE
      __pyx_m_traverse, /* m_traverse */
      __pyx_m_clear, /* m_clear */
      NULL /* m_free */
    #else
      NULL, /* m_traverse */
      NULL, /* m_clear */
      NULL /* m_free */
    #endif
  };
  #ifdef __cplusplus
} /* anonymous namespace */
#endif
#endif

#ifndef CYTHON_NO_PYINIT_EXPORT
#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
#elif PY_MAJOR_VERSION < 3
#ifdef __cplusplus
#define __Pyx_PyMODINIT_FUNC extern "C" void
#else
#define __Pyx_PyMODINIT_FUNC void
#endif
#else
#ifdef __cplusplus
#define __Pyx_PyMODINIT_FUNC extern "C" PyObject *
#else
#define __Pyx_PyMODINIT_FUNC PyObject *
#endif
#endif


#if PY_MAJOR_VERSION < 3
__Pyx_PyMODINIT_FUNC initdata_reader(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC initdata_reader(void)
#else
__Pyx_PyMODINIT_FUNC PyInit_data_reader(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit_data_reader(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;
}
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none)
#else
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)
#endif
{
    PyObject *value = PyObject_GetAttrString(spec, from_name);
    int result = 0;
    if (likely(value)) {
        if (allow_none || value != Py_None) {
#if CYTHON_COMPILING_IN_LIMITED_API
            result = PyModule_AddObject(module, to_name, value);
#else
            result = PyDict_SetItemString(moddict, to_name, value);
#endif
        }
        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, PyModuleDef *def) {
    PyObject *module = NULL, *moddict, *modname;
    CYTHON_UNUSED_VAR(def);
    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;
#if CYTHON_COMPILING_IN_LIMITED_API
    moddict = module;
#else
    moddict = PyModule_GetDict(module);
    if (unlikely(!moddict)) goto bad;
#endif
    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_data_reader(PyObject *__pyx_pyinit_module)
#endif
#endif
{
  int stringtab_initialized = 0;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  if (__pyx_m) {
    if (__pyx_m == __pyx_pyinit_module) return 0;
    PyErr_SetString(PyExc_RuntimeError, "Module 'data_reader' 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
  /*--- 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("data_reader", __pyx_methods, __pyx_k_This_module_provides_read_access, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
  #elif CYTHON_COMPILING_IN_LIMITED_API
  __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  {
    int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef);
    Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  }
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #endif
  CYTHON_UNUSED_VAR(__pyx_t_1);
  __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);
  #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_data_reader(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(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Coroutine_USED
  if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_AsyncGen_USED
  if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_StopAsyncIteration_USED
  if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  PyEval_InitThreads();
  #endif
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  stringtab_initialized = 1;
  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_pytact__data_reader) {
    if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  }
  #if PY_MAJOR_VERSION >= 3
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
    if (!PyDict_GetItemString(modules, "pytact.data_reader")) {
      if (unlikely((PyDict_SetItemString(modules, "pytact.data_reader", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
    }
  }
  #endif
  /*--- Builtin init code ---*/
  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Constants init code ---*/
  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __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))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_type_import_code() < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  (void)__Pyx_modinit_variable_import_code();
  if (unlikely((__Pyx_modinit_function_import_code() < 0))) __PYX_ERR(0, 1, __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

  /* "pytact/data_reader.pyx":87
 * 
 * from __future__ import annotations
 * from contextlib import contextmanager, ExitStack             # <<<<<<<<<<<<<<
 * from dataclasses import dataclass
 * from typing import Any, Callable, TypeVar, TypeAlias, Union, cast, BinaryIO
 */
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_contextmanager);
  __Pyx_GIVEREF(__pyx_n_s_contextmanager);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_contextmanager);
  __Pyx_INCREF(__pyx_n_s_ExitStack);
  __Pyx_GIVEREF(__pyx_n_s_ExitStack);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_ExitStack);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_contextlib, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __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_contextmanager); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_contextmanager, __pyx_t_2) < 0) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_ExitStack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ExitStack, __pyx_t_2) < 0) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":88
 * from __future__ import annotations
 * from contextlib import contextmanager, ExitStack
 * from dataclasses import dataclass             # <<<<<<<<<<<<<<
 * from typing import Any, Callable, TypeVar, TypeAlias, Union, cast, BinaryIO
 * from collections.abc import Iterable, Sequence, Generator
 */
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_dataclass);
  __Pyx_GIVEREF(__pyx_n_s_dataclass);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_dataclass);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_dataclasses, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_dataclass, __pyx_t_3) < 0) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":89
 * from contextlib import contextmanager, ExitStack
 * from dataclasses import dataclass
 * from typing import Any, Callable, TypeVar, TypeAlias, Union, cast, BinaryIO             # <<<<<<<<<<<<<<
 * from collections.abc import Iterable, Sequence, Generator
 * from pathlib import Path
 */
  __pyx_t_2 = PyList_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Any);
  __Pyx_GIVEREF(__pyx_n_s_Any);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Any);
  __Pyx_INCREF(__pyx_n_s_Callable);
  __Pyx_GIVEREF(__pyx_n_s_Callable);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_Callable);
  __Pyx_INCREF(__pyx_n_s_TypeVar);
  __Pyx_GIVEREF(__pyx_n_s_TypeVar);
  PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_TypeVar);
  __Pyx_INCREF(__pyx_n_s_TypeAlias);
  __Pyx_GIVEREF(__pyx_n_s_TypeAlias);
  PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_TypeAlias);
  __Pyx_INCREF(__pyx_n_s_Union);
  __Pyx_GIVEREF(__pyx_n_s_Union);
  PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_Union);
  __Pyx_INCREF(__pyx_n_s_cast);
  __Pyx_GIVEREF(__pyx_n_s_cast);
  PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_cast);
  __Pyx_INCREF(__pyx_n_s_BinaryIO);
  __Pyx_GIVEREF(__pyx_n_s_BinaryIO);
  PyList_SET_ITEM(__pyx_t_2, 6, __pyx_n_s_BinaryIO);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 89, __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_Any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_2) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Callable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Callable, __pyx_t_2) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_TypeVar); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TypeVar, __pyx_t_2) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_TypeAlias); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TypeAlias, __pyx_t_2) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Union, __pyx_t_2) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_cast); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_cast, __pyx_t_2) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_BinaryIO); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BinaryIO, __pyx_t_2) < 0) __PYX_ERR(0, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":90
 * from dataclasses import dataclass
 * from typing import Any, Callable, TypeVar, TypeAlias, Union, cast, BinaryIO
 * from collections.abc import Iterable, Sequence, Generator             # <<<<<<<<<<<<<<
 * from pathlib import Path
 * from immutables import Map
 */
  __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_Iterable);
  __Pyx_GIVEREF(__pyx_n_s_Iterable);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Iterable);
  __Pyx_INCREF(__pyx_n_s_Sequence);
  __Pyx_GIVEREF(__pyx_n_s_Sequence);
  PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_Sequence);
  __Pyx_INCREF(__pyx_n_s_Generator);
  __Pyx_GIVEREF(__pyx_n_s_Generator);
  PyList_SET_ITEM(__pyx_t_3, 2, __pyx_n_s_Generator);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections_abc, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Iterable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Iterable, __pyx_t_3) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Sequence, __pyx_t_3) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Generator); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Generator, __pyx_t_3) < 0) __PYX_ERR(0, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":91
 * from typing import Any, Callable, TypeVar, TypeAlias, Union, cast, BinaryIO
 * from collections.abc import Iterable, Sequence, Generator
 * from pathlib import Path             # <<<<<<<<<<<<<<
 * from immutables import Map
 * import signal
 */
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Path);
  __Pyx_GIVEREF(__pyx_n_s_Path);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Path);
  __pyx_t_3 = __Pyx_Import(__pyx_n_s_pathlib, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __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_Path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Path, __pyx_t_2) < 0) __PYX_ERR(0, 91, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":92
 * from collections.abc import Iterable, Sequence, Generator
 * from pathlib import Path
 * from immutables import Map             # <<<<<<<<<<<<<<
 * import signal
 * import pytact.graph_api_capnp_cython as apic
 */
  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_n_s_Map);
  __Pyx_GIVEREF(__pyx_n_s_Map);
  PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Map);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_immutables, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Map); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Map, __pyx_t_3) < 0) __PYX_ERR(0, 92, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":93
 * from pathlib import Path
 * from immutables import Map
 * import signal             # <<<<<<<<<<<<<<
 * import pytact.graph_api_capnp_cython as apic
 * import capnp
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_signal, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_signal, __pyx_t_2) < 0) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":94
 * from immutables import Map
 * import signal
 * import pytact.graph_api_capnp_cython as apic             # <<<<<<<<<<<<<<
 * import capnp
 * import pytact.graph_api_capnp as graph_api_capnp
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_pytact_graph_api_capnp_cython, __pyx_tuple__34); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_apic, __pyx_t_2) < 0) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":95
 * import signal
 * import pytact.graph_api_capnp_cython as apic
 * import capnp             # <<<<<<<<<<<<<<
 * import pytact.graph_api_capnp as graph_api_capnp
 * from capnp.includes.types cimport *
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_capnp, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_capnp, __pyx_t_2) < 0) __PYX_ERR(0, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":96
 * import pytact.graph_api_capnp_cython as apic
 * import capnp
 * import pytact.graph_api_capnp as graph_api_capnp             # <<<<<<<<<<<<<<
 * from capnp.includes.types cimport *
 * from libcpp.vector cimport vector
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_pytact_graph_api_capnp, __pyx_tuple__35); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_graph_api_capnp, __pyx_t_2) < 0) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":102
 * from libcpp.stack cimport stack
 * from pytact.graph_api_capnp_cython cimport *
 * import mmap             # <<<<<<<<<<<<<<
 * import itertools
 * import resource
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_mmap, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mmap, __pyx_t_2) < 0) __PYX_ERR(0, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":103
 * from pytact.graph_api_capnp_cython cimport *
 * import mmap
 * import itertools             # <<<<<<<<<<<<<<
 * import resource
 * import threading
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_itertools, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_itertools, __pyx_t_2) < 0) __PYX_ERR(0, 103, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":104
 * import mmap
 * import itertools
 * import resource             # <<<<<<<<<<<<<<
 * import threading
 * import subprocess
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_resource, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_resource, __pyx_t_2) < 0) __PYX_ERR(0, 104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":105
 * import itertools
 * import resource
 * import threading             # <<<<<<<<<<<<<<
 * import subprocess
 * import shutil
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_threading, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_threading, __pyx_t_2) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":106
 * import resource
 * import threading
 * import subprocess             # <<<<<<<<<<<<<<
 * import shutil
 * import time
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_subprocess, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_subprocess, __pyx_t_2) < 0) __PYX_ERR(0, 106, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":107
 * import threading
 * import subprocess
 * import shutil             # <<<<<<<<<<<<<<
 * import time
 * 
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_shutil, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_shutil, __pyx_t_2) < 0) __PYX_ERR(0, 107, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":108
 * import subprocess
 * import shutil
 * import time             # <<<<<<<<<<<<<<
 * 
 * T = TypeVar('T')
 */
  __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_time, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_2) < 0) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":110
 * import time
 * 
 * T = TypeVar('T')             # <<<<<<<<<<<<<<
 * class TupleLike():
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_TypeVar); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_T, __pyx_t_3) < 0) __PYX_ERR(0, 110, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":111
 * 
 * T = TypeVar('T')
 * class TupleLike():             # <<<<<<<<<<<<<<
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):
 *         super().__init__()
 */
  __pyx_t_3 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TupleLike, __pyx_n_s_TupleLike, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":112
 * T = TypeVar('T')
 * class TupleLike():
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):             # <<<<<<<<<<<<<<
 *         super().__init__()
 *         self._count = count
 */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_count, __pyx_n_s_int) < 0) __PYX_ERR(0, 112, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_index_getter, __pyx_kp_s_Callable_int_T) < 0) __PYX_ERR(0, 112, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9TupleLike_1__init__, 0, __pyx_n_s_TupleLike___init, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__38)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_t_5);
  PyList_Append(__pyx_t_2, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_5) < 0) __PYX_ERR(0, 112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":116
 *         self._count = count
 *         self._index_getter = index_getter
 *     def __getitem__(self, index: int) -> T:             # <<<<<<<<<<<<<<
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_index, __pyx_n_s_int) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_s_T) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9TupleLike_3__getitem__, 0, __pyx_n_s_TupleLike___getitem, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__40)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_getitem, __pyx_t_4) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "pytact/data_reader.pyx":119
 *         if index >= self._count: raise IndexError()
 *         return self._index_getter(index)
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return self._count
 * 
 */
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_return, __pyx_n_s_int) < 0) __PYX_ERR(0, 119, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9TupleLike_5__len__, 0, __pyx_n_s_TupleLike___len, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_len, __pyx_t_5) < 0) __PYX_ERR(0, 119, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":111
 * 
 * T = TypeVar('T')
 * class TupleLike():             # <<<<<<<<<<<<<<
 *     def __init__(self, count : int, index_getter : Callable[[int], T]):
 *         super().__init__()
 */
  __pyx_t_5 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_TupleLike, __pyx_empty_tuple, __pyx_t_3, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_CyFunction_InitClassCell(__pyx_t_2, __pyx_t_5) < 0) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TupleLike, __pyx_t_5) < 0) __PYX_ERR(0, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":122
 *         return self._count
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def file_dataset_reader(fname: Path) -> Generator[Any, None, None]:
 *     """Load a single dataset file into memory, and expose it's raw Cap'n Proto structures.
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_fname, __pyx_n_s_Path) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_kp_s_Generator_Any_None_None) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_1file_dataset_reader, 0, __pyx_n_s_file_dataset_reader, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_file_dataset_reader, __pyx_t_5) < 0) __PYX_ERR(0, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":204
 *         self.graph_index = GraphIndex(c_nodes, c_edges, c_representatives, local_to_global)
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         """Convert dependency-index relative to a graph-id to a new graph-id.
 * 
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_graph, __pyx_n_s_int) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dep_index, __pyx_n_s_int) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_s_int) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_18LowlevelDataReader_3local_to_global, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_LowlevelDataReader_local_to_glob, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_LowlevelDataReader->tp_dict, __pyx_n_s_local_to_global, __pyx_t_2) < 0) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_LowlevelDataReader);

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_18LowlevelDataReader_9__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_LowlevelDataReader___reduce_cyth, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__46)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_18LowlevelDataReader_11__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_LowlevelDataReader___setstate_cy, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":221
 *         return len(self.graphs)
 * 
 * def setup_dataset(dataset_path: Path):             # <<<<<<<<<<<<<<
 *     if not dataset_path.exists():
 *         raise ValueError(f"Dataset does not exist: {dataset_path}")
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dataset_path, __pyx_n_s_Path) < 0) __PYX_ERR(0, 221, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_4setup_dataset, 0, __pyx_n_s_setup_dataset, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setup_dataset, __pyx_t_5) < 0) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":248
 *         return dataset_path
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def lowlevel_data_reader(dataset_path: Path) -> Generator[LowlevelDataReader, None, None]:
 *     """Map a directory of dataset files into memory, and expose their raw Cap'n Proto structures.
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dataset_path, __pyx_n_s_Path) < 0) __PYX_ERR(0, 248, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Generator_LowlevelDataReader_Non) < 0) __PYX_ERR(0, 248, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_6lowlevel_data_reader, 0, __pyx_n_s_lowlevel_data_reader, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lowlevel_data_reader, __pyx_t_2) < 0) __PYX_ERR(0, 248, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":287
 *         resource.setrlimit(resource.RLIMIT_NOFILE, (soft, hard))
 * 
 * ProofStateId = int             # <<<<<<<<<<<<<<
 * TacticId = int
 * ctypedef uint32_t GraphId
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ProofStateId, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 287, __pyx_L1_error)

  /* "pytact/data_reader.pyx":288
 * 
 * ProofStateId = int
 * TacticId = int             # <<<<<<<<<<<<<<
 * ctypedef uint32_t GraphId
 * ctypedef uint32_t NodeId
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TacticId, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 288, __pyx_L1_error)

  /* "pytact/data_reader.pyx":291
 * ctypedef uint32_t GraphId
 * ctypedef uint32_t NodeId
 * NodeHash = int             # <<<<<<<<<<<<<<
 * 
 * cdef class Node:
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NodeHash, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 291, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_4Node_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Node___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__52)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.node cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_4Node_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Node___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__53)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_15EdgeTarget_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_EdgeTarget_List___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__54)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.edges,self.graph_index cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_15EdgeTarget_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_EdgeTarget_List___setstate_cytho, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__55)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9Node_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Node_List___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__56)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9Node_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Node_List___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__57)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10ProofState_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofState___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__58)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10ProofState_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofState___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__59)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_15ProofState_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofState_List___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__60)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_15ProofState_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofState_List___setstate_cytho, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__61)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_13Argument_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Argument_List___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__62)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_13Argument_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Argument_List___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__63)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":586
 *         return self.reader.size()
 * 
 * Unresolvable: TypeAlias = None             # <<<<<<<<<<<<<<
 * Unknown: TypeAlias = None
 * cdef class Outcome:
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Unresolvable, Py_None) < 0) __PYX_ERR(0, 586, __pyx_L1_error)

  /* "pytact/data_reader.pyx":587
 * 
 * Unresolvable: TypeAlias = None
 * Unknown: TypeAlias = None             # <<<<<<<<<<<<<<
 * cdef class Outcome:
 *     """An outcome is the result of running a tactic on a proof state. A tactic may run on multiple proof states."""
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Unknown, Py_None) < 0) __PYX_ERR(0, 587, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Outcome_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Outcome___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__64)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Outcome_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Outcome___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_12Outcome_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Outcome_List___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__66)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_12Outcome_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Outcome_List___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__67)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9ProofStep_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofStep___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__68)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9ProofStep_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofStep___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__69)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_14ProofStep_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofStep_List___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__70)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_14ProofStep_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_ProofStep_List___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__71)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_19Representative_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Representative_List___reduce_cyt, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__72)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_19Representative_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Representative_List___setstate_c, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__73)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":773
 * 
 * @dataclass
 * class Original: pass             # <<<<<<<<<<<<<<
 * @dataclass
 * class Discharged:
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Original, __pyx_n_s_Original, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":772
 *         return self.reader.size()
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class Original: pass
 * @dataclass
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":773
 * 
 * @dataclass
 * class Original: pass             # <<<<<<<<<<<<<<
 * @dataclass
 * class Discharged:
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_Original, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Original, __pyx_t_3) < 0) __PYX_ERR(0, 773, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":775
 * class Original: pass
 * @dataclass
 * class Discharged:             # <<<<<<<<<<<<<<
 *     original: Definition
 * @dataclass
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Discharged, __pyx_n_s_Discharged, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_original, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 775, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_3) < 0) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":774
 * @dataclass
 * class Original: pass
 * @dataclass             # <<<<<<<<<<<<<<
 * class Discharged:
 *     original: Definition
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 774, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":775
 * class Original: pass
 * @dataclass
 * class Discharged:             # <<<<<<<<<<<<<<
 *     original: Definition
 * @dataclass
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_Discharged, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 774, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Discharged, __pyx_t_3) < 0) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":778
 *     original: Definition
 * @dataclass
 * class Substituted:             # <<<<<<<<<<<<<<
 *     original: Definition
 * 
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Substituted, __pyx_n_s_Substituted, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_original, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 778, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_3) < 0) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":777
 * class Discharged:
 *     original: Definition
 * @dataclass             # <<<<<<<<<<<<<<
 * class Substituted:
 *     original: Definition
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":778
 *     original: Definition
 * @dataclass
 * class Substituted:             # <<<<<<<<<<<<<<
 *     original: Definition
 * 
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_Substituted, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 777, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Substituted, __pyx_t_3) < 0) __PYX_ERR(0, 778, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":782
 * 
 * @dataclass
 * class Inductive:             # <<<<<<<<<<<<<<
 *     representative: Definition
 * @dataclass
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Inductive, __pyx_n_s_Inductive, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_representative, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 782, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_3) < 0) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":781
 *     original: Definition
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class Inductive:
 *     representative: Definition
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":782
 * 
 * @dataclass
 * class Inductive:             # <<<<<<<<<<<<<<
 *     representative: Definition
 * @dataclass
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_Inductive, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Inductive, __pyx_t_3) < 0) __PYX_ERR(0, 782, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":785
 *     representative: Definition
 * @dataclass
 * class Constructor:             # <<<<<<<<<<<<<<
 *     representative: Definition
 * @dataclass
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Constructor, __pyx_n_s_Constructor, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_representative, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 785, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_3) < 0) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":784
 * class Inductive:
 *     representative: Definition
 * @dataclass             # <<<<<<<<<<<<<<
 * class Constructor:
 *     representative: Definition
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":785
 *     representative: Definition
 * @dataclass
 * class Constructor:             # <<<<<<<<<<<<<<
 *     representative: Definition
 * @dataclass
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_Constructor, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Constructor, __pyx_t_3) < 0) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":788
 *     representative: Definition
 * @dataclass
 * class Projection:             # <<<<<<<<<<<<<<
 *     representative: Definition
 * @dataclass
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Projection, __pyx_n_s_Projection, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_representative, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 788, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_3) < 0) __PYX_ERR(0, 788, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":787
 * class Constructor:
 *     representative: Definition
 * @dataclass             # <<<<<<<<<<<<<<
 * class Projection:
 *     representative: Definition
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":788
 *     representative: Definition
 * @dataclass
 * class Projection:             # <<<<<<<<<<<<<<
 *     representative: Definition
 * @dataclass
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_Projection, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 788, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 787, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Projection, __pyx_t_3) < 0) __PYX_ERR(0, 788, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":791
 *     representative: Definition
 * @dataclass
 * class ManualConstant: pass             # <<<<<<<<<<<<<<
 * @dataclass
 * class TacticalConstant:
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_ManualConstant, __pyx_n_s_ManualConstant, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":790
 * class Projection:
 *     representative: Definition
 * @dataclass             # <<<<<<<<<<<<<<
 * class ManualConstant: pass
 * @dataclass
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 790, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":791
 *     representative: Definition
 * @dataclass
 * class ManualConstant: pass             # <<<<<<<<<<<<<<
 * @dataclass
 * class TacticalConstant:
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_ManualConstant, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 790, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ManualConstant, __pyx_t_3) < 0) __PYX_ERR(0, 791, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":793
 * class ManualConstant: pass
 * @dataclass
 * class TacticalConstant:             # <<<<<<<<<<<<<<
 *     proof: Sequence[ProofStep]
 * @dataclass
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TacticalConstant, __pyx_n_s_TacticalConstant, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_proof, __pyx_kp_s_Sequence_ProofStep) < 0) __PYX_ERR(0, 793, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_3) < 0) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":792
 * @dataclass
 * class ManualConstant: pass
 * @dataclass             # <<<<<<<<<<<<<<
 * class TacticalConstant:
 *     proof: Sequence[ProofStep]
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":793
 * class ManualConstant: pass
 * @dataclass
 * class TacticalConstant:             # <<<<<<<<<<<<<<
 *     proof: Sequence[ProofStep]
 * @dataclass
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_TacticalConstant, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TacticalConstant, __pyx_t_3) < 0) __PYX_ERR(0, 793, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":796
 *     proof: Sequence[ProofStep]
 * @dataclass
 * class ManualSectionConstant: pass             # <<<<<<<<<<<<<<
 * @dataclass
 * class TacticalSectionConstant:
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_ManualSectionConstant, __pyx_n_s_ManualSectionConstant, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":795
 * class TacticalConstant:
 *     proof: Sequence[ProofStep]
 * @dataclass             # <<<<<<<<<<<<<<
 * class ManualSectionConstant: pass
 * @dataclass
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":796
 *     proof: Sequence[ProofStep]
 * @dataclass
 * class ManualSectionConstant: pass             # <<<<<<<<<<<<<<
 * @dataclass
 * class TacticalSectionConstant:
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_ManualSectionConstant, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ManualSectionConstant, __pyx_t_3) < 0) __PYX_ERR(0, 796, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":798
 * class ManualSectionConstant: pass
 * @dataclass
 * class TacticalSectionConstant:             # <<<<<<<<<<<<<<
 *     proof: Sequence[ProofStep]
 * 
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TacticalSectionConstant, __pyx_n_s_TacticalSectionConstant, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_proof, __pyx_kp_s_Sequence_ProofStep) < 0) __PYX_ERR(0, 798, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_3) < 0) __PYX_ERR(0, 798, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":797
 * @dataclass
 * class ManualSectionConstant: pass
 * @dataclass             # <<<<<<<<<<<<<<
 * class TacticalSectionConstant:
 *     proof: Sequence[ProofStep]
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 797, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "pytact/data_reader.pyx":798
 * class ManualSectionConstant: pass
 * @dataclass
 * class TacticalSectionConstant:             # <<<<<<<<<<<<<<
 *     proof: Sequence[ProofStep]
 * 
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_TacticalSectionConstant, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 797, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TacticalSectionConstant, __pyx_t_3) < 0) __PYX_ERR(0, 798, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":875
 *         return Representative_List.init(self.reader.getExternalPrevious(), self.graph_index, self.graph)
 * 
 *     def _global_context(self, across_files : bool, inclusive, seen : set[Node]):             # <<<<<<<<<<<<<<
 *         # force inclusivity for recursive definitions
 *         d = self.cluster_representative
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_across_files, __pyx_n_s_bool) < 0) __PYX_ERR(0, 875, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_seen, __pyx_kp_s_set_Node) < 0) __PYX_ERR(0, 875, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10Definition_7_global_context, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Definition__global_context, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition->tp_dict, __pyx_n_s_global_context, __pyx_t_3) < 0) __PYX_ERR(0, 875, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Definition);

  /* "pytact/data_reader.pyx":895
 *             d = d.previous
 * 
 *     def global_context(self, across_files : bool = True, inclusive = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created.
 * 
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_across_files, __pyx_n_s_bool) < 0) __PYX_ERR(0, 895, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_kp_s_Iterable_Definition) < 0) __PYX_ERR(0, 895, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10Definition_10global_context, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Definition_global_context, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__77);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition->tp_dict, __pyx_n_s_global_context_2, __pyx_t_2) < 0) __PYX_ERR(0, 895, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Definition);

  /* "pytact/data_reader.pyx":918
 *         )
 * 
 *     def clustered_global_context(self, across_files : bool = True, inclusive : bool = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions in the global context when this definition was created, clustered into
 *         mutually recursive cliques.
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_across_files, __pyx_n_s_bool) < 0) __PYX_ERR(0, 918, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_inclusive, __pyx_n_s_bool) < 0) __PYX_ERR(0, 918, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Iterable_list_Definition) < 0) __PYX_ERR(0, 918, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10Definition_12clustered_global_context, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Definition_clustered_global_cont, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__78)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_tuple__77);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition->tp_dict, __pyx_n_s_clustered_global_context, __pyx_t_3) < 0) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Definition);

  /* "pytact/data_reader.pyx":1057
 *         return self.graph_index.representatives[self.graph] == self.node.nodeid
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def _group_by_clusters(cls, definitions : Iterable[Definition]) -> Iterable[list[Definition]]:
 *         definitions_it = iter(definitions)
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_definitions, __pyx_kp_s_Iterable_Definition) < 0) __PYX_ERR(0, 1057, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_kp_s_Iterable_list_Definition) < 0) __PYX_ERR(0, 1057, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10Definition_14_group_by_clusters, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Definition__group_by_clusters, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__13)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition->tp_dict, __pyx_n_s_group_by_clusters, __pyx_t_2) < 0) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Definition);
  __Pyx_GetNameInClass(__pyx_t_2, (PyObject *)__pyx_ptype_6pytact_11data_reader_Definition, __pyx_n_s_group_by_clusters); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Definition->tp_dict, __pyx_n_s_group_by_clusters, __pyx_t_3) < 0) __PYX_ERR(0, 1057, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Definition);

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10Definition_17__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Definition___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__80)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_reduce_cython, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_10Definition_19__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Definition___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_3) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_23Dataset_Definition_List_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Dataset_Definition_List___reduce, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__82)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_reduce_cython, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_23Dataset_Definition_List_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Dataset_Definition_List___setsta, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__83)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_3) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":1151
 *             return Node.init(self.graph, representative, self.graph_index).definition
 * 
 *     def definitions(self, across_files = False, spine_only = False) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_kp_s_Iterable_Definition) < 0) __PYX_ERR(0, 1151, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Dataset_3definitions, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Dataset_definitions, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__86);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Dataset->tp_dict, __pyx_n_s_definitions, __pyx_t_2) < 0) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Dataset);

  /* "pytact/data_reader.pyx":1177
 *             return Dataset_Definition_List.init(self.reader.getDefinitions(), self.graph_index, self.graph)
 * 
 *     def clustered_definitions(self, across_files = False, spine_only = False) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the file, clustered by mutually recursive definitions.
 *         Note that some of these nodes may not be part of the 'super-global' context. Those are definitions inside
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Iterable_list_Definition) < 0) __PYX_ERR(0, 1177, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Dataset_5clustered_definitions, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Dataset_clustered_definitions, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_tuple__86);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Dataset->tp_dict, __pyx_n_s_clustered_definitions, __pyx_t_3) < 0) __PYX_ERR(0, 1177, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Dataset);

  /* "pytact/data_reader.pyx":1203
 *         return (<char*>temp.begin())[:temp.size()]
 * 
 *     def node_by_id(self, nodeid: NodeId) -> Node:             # <<<<<<<<<<<<<<
 *         """Lookup a node inside of this file by it's local node-id. This is a low-level function."""
 *         return Node.init(self.graph, nodeid, self.graph_index)
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_nodeid, __pyx_n_s_NodeId) < 0) __PYX_ERR(0, 1203, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_n_s_Node) < 0) __PYX_ERR(0, 1203, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Dataset_7node_by_id, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Dataset_node_by_id, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_Dataset->tp_dict, __pyx_n_s_node_by_id, __pyx_t_2) < 0) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_Dataset);

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Dataset_9__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Dataset___reduce_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__90)); 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_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index,self.reader cannot be converted to a Python object for pickling"
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_7Dataset_11__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Dataset___setstate_cython, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1207
 *         return Node.init(self.graph, nodeid, self.graph_index)
 * 
 * def lowlevel_to_highlevel(LowlevelDataReader lreader) -> dict[Path, Dataset]:             # <<<<<<<<<<<<<<
 *     """Convert a dataset initialized as a `LowLevelDataReader` into a high level interface."""
 *     return {f: Dataset.init(f, g, lreader)
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_dict_Path_Dataset) < 0) __PYX_ERR(0, 1207, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_9lowlevel_to_highlevel, 0, __pyx_n_s_lowlevel_to_highlevel, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__93)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_lowlevel_to_highlevel, __pyx_t_3) < 0) __PYX_ERR(0, 1207, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":1212
 *             for f, g in lreader.graphid_by_filename.items()}
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def data_reader(dataset_path: Path) -> Generator[dict[Path, Dataset], None, None]:
 *     """Load a directory of dataset files into memory, and expose the data they contain.
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dataset_path, __pyx_n_s_Path) < 0) __PYX_ERR(0, 1212, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Generator_dict_Path_Dataset_None) < 0) __PYX_ERR(0, 1212, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_11data_reader, 0, __pyx_n_s_data_reader, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_data_reader, __pyx_t_2) < 0) __PYX_ERR(0, 1212, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1251
 *         return wrapper
 * 
 *     def local_to_global(self, graph: int, dep_index: int) -> int:             # <<<<<<<<<<<<<<
 *         return self.graph_index.local_to_global[graph][dep_index]
 * 
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_graph, __pyx_n_s_int) < 0) __PYX_ERR(0, 1251, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dep_index, __pyx_n_s_int) < 0) __PYX_ERR(0, 1251, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_s_int) < 0) __PYX_ERR(0, 1251, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_1local_to_global, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OnlineDefinitionsReader_local_to, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__95)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader->tp_dict, __pyx_n_s_local_to_global, __pyx_t_5) < 0) __PYX_ERR(0, 1251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader);

  /* "pytact/data_reader.pyx":1271
 *         return None
 * 
 *     def definitions(self, full : bool = True) -> Iterable[Definition]:             # <<<<<<<<<<<<<<
 *         """The list of definitions that are currently in the global context.
 * 
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_full, __pyx_n_s_bool) < 0) __PYX_ERR(0, 1271, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_kp_s_Iterable_Definition) < 0) __PYX_ERR(0, 1271, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_3definitions, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OnlineDefinitionsReader_definiti, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__97)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__98);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader->tp_dict, __pyx_n_s_definitions, __pyx_t_2) < 0) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader);

  /* "pytact/data_reader.pyx":1295
 *         return representative.global_context(inclusive = True, across_files = full)
 * 
 *     def clustered_definitions(self, full : bool = True) -> Iterable[list[Definition]]:             # <<<<<<<<<<<<<<
 *         """All of the definitions present in the global context, clustered by mutually recursive definitions.
 * 
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_full, __pyx_n_s_bool) < 0) __PYX_ERR(0, 1295, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Iterable_list_Definition) < 0) __PYX_ERR(0, 1295, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_5clustered_definitions, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OnlineDefinitionsReader_clustere, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__100)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__98);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader->tp_dict, __pyx_n_s_clustered_definitions, __pyx_t_5) < 0) __PYX_ERR(0, 1295, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_6pytact_11data_reader_OnlineDefinitionsReader);

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):
 */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OnlineDefinitionsReader___reduce, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__101)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_reduce_cython, __pyx_t_5) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "self.graph_index cannot be converted to a Python object for pickling"
 */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_23OnlineDefinitionsReader_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_OnlineDefinitionsReader___setsta, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__102)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_setstate_cython, __pyx_t_5) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1304
 *         return Definition._group_by_clusters(self.definitions(full))
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_definitions_initialize(OnlineDefinitionsReader stack,
 *                                   PredictionProtocol_Request_Initialize_Reader init) -> Generator[OnlineDefinitionsReader, None, None]:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Generator_OnlineDefinitionsReade) < 0) __PYX_ERR(0, 1304, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_14online_definitions_initialize, 0, __pyx_n_s_online_definitions_initialize, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_online_definitions_initialize, __pyx_t_2) < 0) __PYX_ERR(0, 1304, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1322
 *     yield dr
 * 
 * def empty_online_definitions_initialize() -> OnlineDefinitionsReader:             # <<<<<<<<<<<<<<
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_s_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1322, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17empty_online_definitions_initialize, 0, __pyx_n_s_empty_online_definitions_initial, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__105)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_empty_online_definitions_initial, __pyx_t_3) < 0) __PYX_ERR(0, 1322, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":1325
 *     defs = OnlineDefinitionsReader.init_empty()
 * 
 * @contextmanager             # <<<<<<<<<<<<<<
 * def online_data_predict(OnlineDefinitionsReader base,
 *                         PredictionProtocol_Request_Predict_Reader predict) -> Generator[ProofState, None, None]:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Generator_ProofState_None_None) < 0) __PYX_ERR(0, 1325, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_19online_data_predict, 0, __pyx_n_s_online_data_predict, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__19)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_online_data_predict, __pyx_t_2) < 0) __PYX_ERR(0, 1325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1348
 * 
 * @dataclass
 * class TacticPredictionGraph:             # <<<<<<<<<<<<<<
 *     ident : int
 *     arguments : list[Node]
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TacticPredictionGraph, __pyx_n_s_TacticPredictionGraph, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_ident, __pyx_n_s_int) < 0) __PYX_ERR(0, 1348, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_arguments, __pyx_kp_s_list_Node) < 0) __PYX_ERR(0, 1348, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_confidence, __pyx_n_s_float) < 0) __PYX_ERR(0, 1348, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_5) < 0) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1347
 *     yield ProofState.init(predict.source.getState(), graph_index.nodes.size() - 1, &graph_index)
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class TacticPredictionGraph:
 *     ident : int
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1348
 * 
 * @dataclass
 * class TacticPredictionGraph:             # <<<<<<<<<<<<<<
 *     ident : int
 *     arguments : list[Node]
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_TacticPredictionGraph, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TacticPredictionGraph, __pyx_t_5) < 0) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1354
 * 
 * @dataclass
 * class TacticPredictionsGraph:             # <<<<<<<<<<<<<<
 *     predictions : list[TacticPredictionsGraph]
 * 
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TacticPredictionsGraph, __pyx_n_s_TacticPredictionsGraph, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_predictions, __pyx_kp_s_list_TacticPredictionsGraph) < 0) __PYX_ERR(0, 1354, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_5) < 0) __PYX_ERR(0, 1354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1353
 *     confidence : float
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class TacticPredictionsGraph:
 *     predictions : list[TacticPredictionsGraph]
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1354
 * 
 * @dataclass
 * class TacticPredictionsGraph:             # <<<<<<<<<<<<<<
 *     predictions : list[TacticPredictionsGraph]
 * 
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_TacticPredictionsGraph, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1354, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TacticPredictionsGraph, __pyx_t_5) < 0) __PYX_ERR(0, 1354, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1358
 * 
 * @dataclass
 * class TacticPredictionText:             # <<<<<<<<<<<<<<
 *     tactic_text : str
 *     confidence : float
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TacticPredictionText, __pyx_n_s_TacticPredictionText, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_tactic_text, __pyx_n_s_str) < 0) __PYX_ERR(0, 1358, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_confidence, __pyx_n_s_float) < 0) __PYX_ERR(0, 1358, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_5) < 0) __PYX_ERR(0, 1358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1357
 *     predictions : list[TacticPredictionsGraph]
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class TacticPredictionText:
 *     tactic_text : str
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1357, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1358
 * 
 * @dataclass
 * class TacticPredictionText:             # <<<<<<<<<<<<<<
 *     tactic_text : str
 *     confidence : float
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_TacticPredictionText, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TacticPredictionText, __pyx_t_5) < 0) __PYX_ERR(0, 1358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1363
 * 
 * @dataclass
 * class TacticPredictionsText:             # <<<<<<<<<<<<<<
 *     predictions : list[TacticPredictionsText]
 * 
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_TacticPredictionsText, __pyx_n_s_TacticPredictionsText, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_predictions, __pyx_kp_s_list_TacticPredictionsText) < 0) __PYX_ERR(0, 1363, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_5) < 0) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1362
 *     confidence : float
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class TacticPredictionsText:
 *     predictions : list[TacticPredictionsText]
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1362, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1363
 * 
 * @dataclass
 * class TacticPredictionsText:             # <<<<<<<<<<<<<<
 *     predictions : list[TacticPredictionsText]
 * 
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_TacticPredictionsText, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1362, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TacticPredictionsText, __pyx_t_5) < 0) __PYX_ERR(0, 1363, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1367
 * 
 * @dataclass
 * class CheckAlignmentMessage:             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_CheckAlignmentMessage, __pyx_n_s_CheckAlignmentMessage, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":1366
 *     predictions : list[TacticPredictionsText]
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class CheckAlignmentMessage:
 *     pass
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1367
 * 
 * @dataclass
 * class CheckAlignmentMessage:             # <<<<<<<<<<<<<<
 *     pass
 * 
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_CheckAlignmentMessage, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1367, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1366, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CheckAlignmentMessage, __pyx_t_5) < 0) __PYX_ERR(0, 1367, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1371
 * 
 * @dataclass
 * class CheckAlignmentResponse:             # <<<<<<<<<<<<<<
 *     unknown_definitions : list[Definition]
 *     unknown_tactics : list[int]
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_CheckAlignmentResponse, __pyx_n_s_CheckAlignmentResponse, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_unknown_definitions, __pyx_kp_s_list_Definition) < 0) __PYX_ERR(0, 1371, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_unknown_tactics, __pyx_kp_s_list_int) < 0) __PYX_ERR(0, 1371, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_5) < 0) __PYX_ERR(0, 1371, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1370
 *     pass
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class CheckAlignmentResponse:
 *     unknown_definitions : list[Definition]
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1371
 * 
 * @dataclass
 * class CheckAlignmentResponse:             # <<<<<<<<<<<<<<
 *     unknown_definitions : list[Definition]
 *     unknown_tactics : list[int]
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_CheckAlignmentResponse, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1371, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1370, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CheckAlignmentResponse, __pyx_t_5) < 0) __PYX_ERR(0, 1371, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1376
 * 
 * @dataclass
 * class GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     definitions : OnlineDefinitionsReader
 *     tactics : pytact.graph_api_capnp_cython.AbstractTactic_Reader_List
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_GlobalContextMessage, __pyx_n_s_GlobalContextMessage, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_definitions, __pyx_n_s_OnlineDefinitionsReader) < 0) __PYX_ERR(0, 1376, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_tactics, __pyx_kp_s_pytact_graph_api_capnp_cython_Ab) < 0) __PYX_ERR(0, 1376, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_log_annotation, __pyx_n_s_str) < 0) __PYX_ERR(0, 1376, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_prediction_requests, __pyx_kp_s_Generator_GlobalContextMessage_P) < 0) __PYX_ERR(0, 1376, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_annotations, __pyx_t_5) < 0) __PYX_ERR(0, 1376, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1375
 *     unknown_tactics : list[int]
 * 
 * @dataclass             # <<<<<<<<<<<<<<
 * class GlobalContextMessage:
 *     definitions : OnlineDefinitionsReader
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_dataclass); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1376
 * 
 * @dataclass
 * class GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     definitions : OnlineDefinitionsReader
 *     tactics : pytact.graph_api_capnp_cython.AbstractTactic_Reader_List
 */
  __pyx_t_4 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_GlobalContextMessage, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_4};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GlobalContextMessage, __pyx_t_5) < 0) __PYX_ERR(0, 1376, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1384
 *                                     None]
 * 
 * def convert_predictions(preds, stack_size):             # <<<<<<<<<<<<<<
 *     if isinstance(preds, TacticPredictionsText):
 *         preds = [{'tacticText': pred.tactic_text,
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_22convert_predictions, 0, __pyx_n_s_convert_predictions, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__108)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_convert_predictions, __pyx_t_2) < 0) __PYX_ERR(0, 1384, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1399
 *         raise Exception("Incorrect predictions received")
 * 
 * def capnp_message_generator_lowlevel(socket: socket.socket, record: BinaryIO | None = None) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_socket, __pyx_kp_s_socket_socket) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_record, __pyx_kp_s_BinaryIO_None) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_Generator_pytact_graph_api_capnp) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_24capnp_message_generator_lowlevel, 0, __pyx_n_s_capnp_message_generator_lowlevel, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__21)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1399, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__110);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_capnp_message_generator_lowlevel, __pyx_t_5) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1444
 *         msg = next_disabled_sigint()
 * 
 * def capnp_message_generator_from_file_lowlevel(message_file: BinaryIO, check = True) -> (             # <<<<<<<<<<<<<<
 *         Generator[pytact.graph_api_capnp_cython.PredictionProtocol_Request_Reader,
 *                   capnp.lib.capnp._DynamicStructBuilder, None]):
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_message_file, __pyx_n_s_BinaryIO) < 0) __PYX_ERR(0, 1444, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_kp_s_Generator_pytact_graph_api_capnp) < 0) __PYX_ERR(0, 1444, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_27capnp_message_generator_from_file_lowlevel, 0, __pyx_n_s_capnp_message_generator_from_fil, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__112);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_capnp_message_generator_from_fil, __pyx_t_2) < 0) __PYX_ERR(0, 1444, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1483
 * 
 * 
 * def prediction_generator(lgenerator, OnlineDefinitionsReader defs):             # <<<<<<<<<<<<<<
 *     msg = next(lgenerator, None)
 *     while msg is not None:
 */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_30prediction_generator, 0, __pyx_n_s_prediction_generator, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_prediction_generator, __pyx_t_2) < 0) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1530
 *             raise Exception("Capnp protocol error")
 * 
 * def capnp_message_generator(socket: socket.socket, record: BinaryIO | None = None) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """A generator that facilitates communication between a prediction server and a Coq process.
 * 
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_socket, __pyx_kp_s_socket_socket) < 0) __PYX_ERR(0, 1530, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_record, __pyx_kp_s_BinaryIO_None) < 0) __PYX_ERR(0, 1530, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_s_GlobalContextMessage) < 0) __PYX_ERR(0, 1530, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_33capnp_message_generator, 0, __pyx_n_s_capnp_message_generator, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__116);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_capnp_message_generator, __pyx_t_5) < 0) __PYX_ERR(0, 1530, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1554
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 * def capnp_message_generator_from_file(message_file: BinaryIO, check = True) -> GlobalContextMessage:             # <<<<<<<<<<<<<<
 *     """Replay and verify a pre-recorded communication sequence between Coq and a prediction server.
 * 
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_message_file, __pyx_n_s_BinaryIO) < 0) __PYX_ERR(0, 1554, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_s_GlobalContextMessage) < 0) __PYX_ERR(0, 1554, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_35capnp_message_generator_from_file, 0, __pyx_n_s_capnp_message_generator_from_fil_2, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__118)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__119);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_capnp_message_generator_from_fil_2, __pyx_t_2) < 0) __PYX_ERR(0, 1554, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1573
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 * class GlobalContextSets:             # <<<<<<<<<<<<<<
 *     """Lazily retrieve a the global context of a definition as a set, with memoization.
 * 
 */
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_GlobalContextSets, __pyx_n_s_GlobalContextSets, (PyObject *) NULL, __pyx_n_s_pytact_data_reader, __pyx_kp_s_Lazily_retrieve_a_the_global_con); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "pytact/data_reader.pyx":1593
 *     ```
 *     """
 *     def __init__(self, cache, parent: GlobalContextSets | None,             # <<<<<<<<<<<<<<
 *                  should_propagate: Callable[[Definition], bool]):
 *         """Do not call directly. Use `GlobalContextSets.new_context` and `GlobalContextSets.sub_context`."""
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_parent, __pyx_kp_s_GlobalContextSets_None) < 0) __PYX_ERR(0, 1593, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_should_propagate, __pyx_kp_s_Callable_Definition_bool) < 0) __PYX_ERR(0, 1593, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17GlobalContextSets_1__init__, 0, __pyx_n_s_GlobalContextSets___init, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__121)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_init, __pyx_t_3) < 0) __PYX_ERR(0, 1593, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":1600
 *         self.should_propagate = should_propagate
 * 
 *     def _propagate(self, d: Definition, context: Map):             # <<<<<<<<<<<<<<
 *         self.cache = self.cache.set(d, context)
 *         if self.should_propagate(d) and (parent := self.parent):
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_d, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 1600, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_context, __pyx_n_s_Map) < 0) __PYX_ERR(0, 1600, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17GlobalContextSets_3_propagate, 0, __pyx_n_s_GlobalContextSets__propagate, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__123)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1600, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_propagate, __pyx_t_5) < 0) __PYX_ERR(0, 1600, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1605
 *             parent._propagate(d, context)
 * 
 *     def _global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         try:
 *             return self.cache[d]
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_d, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 1605, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_s_Map) < 0) __PYX_ERR(0, 1605, __pyx_L1_error)
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17GlobalContextSets_5_global_context_set, 0, __pyx_n_s_GlobalContextSets__global_contex, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__125)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_global_context_set, __pyx_t_3) < 0) __PYX_ERR(0, 1605, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "pytact/data_reader.pyx":1623
 *             return new_set
 * 
 *     def global_context_set(self, d: Definition) -> Map:             # <<<<<<<<<<<<<<
 *         """Retrieve the global context of a definition, caching the result, and intermediate results."""
 *         start = d.cluster_representative
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_d, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_n_s_Map) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17GlobalContextSets_7global_context_set, 0, __pyx_n_s_GlobalContextSets_global_context, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__127)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1623, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_global_context_set_2, __pyx_t_5) < 0) __PYX_ERR(0, 1623, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1631
 *         return context
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     def sub_context(self, propagate: Callable[[Definition], bool]) -> Generator[GlobalContextSets, None, None]:
 *         """Create a sub-context with a separate cache from it's parent, but sharing any info that was
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_propagate_2, __pyx_kp_s_Callable_Definition_bool) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_return, __pyx_kp_s_Generator_GlobalContextSets_None) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17GlobalContextSets_9sub_context, 0, __pyx_n_s_GlobalContextSets_sub_context, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1631, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_sub_context, __pyx_t_5) < 0) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1640
 *         yield GlobalContextSets(self.cache, self, propagate)
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_contextmanager); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "pytact/data_reader.pyx":1641
 * 
 *     @contextmanager
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 *         """Crate a new caching context where global-context-set's can be retrieved and cached."""
 */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_kp_s_Generator_GlobalContextSets_None) < 0) __PYX_ERR(0, 1640, __pyx_L1_error)

  /* "pytact/data_reader.pyx":1640
 *         yield GlobalContextSets(self.cache, self, propagate)
 * 
 *     @contextmanager             # <<<<<<<<<<<<<<
 *     @staticmethod
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 */
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_17GlobalContextSets_12new_context, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_n_s_GlobalContextSets_new_context, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1640, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "pytact/data_reader.pyx":1641
 * 
 *     @contextmanager
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def new_context() -> Generator[GlobalContextSets, None, None]:
 *         """Crate a new caching context where global-context-set's can be retrieved and cached."""
 */
  __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_staticmethod, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1641, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_new_context, __pyx_t_5) < 0) __PYX_ERR(0, 1640, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1573
 *     return GlobalContextMessage(defs, [], None, pg)
 * 
 * class GlobalContextSets:             # <<<<<<<<<<<<<<
 *     """Lazily retrieve a the global context of a definition as a set, with memoization.
 * 
 */
  __pyx_t_5 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_GlobalContextSets, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GlobalContextSets, __pyx_t_5) < 0) __PYX_ERR(0, 1573, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1650
 *     NodeId nodeid
 * 
 * def node_dependencies(Node n, deps: set[Definition] | None = None) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Node` `n`, calculate the set of `Definition`'s that are directly reachable
 *     from `n`. Transitively reachable definitions are not included.
 */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_deps, __pyx_kp_s_set_Definition_None) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_kp_s_set_Definition) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_37node_dependencies, 0, __pyx_n_s_node_dependencies, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__130)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_tuple__131);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_node_dependencies, __pyx_t_5) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "pytact/data_reader.pyx":1687
 *     return deps
 * 
 * def definition_dependencies(d: Definition) -> set[Definition]:             # <<<<<<<<<<<<<<
 *     """Given a `Definition` `d`, calculate the set of `Definition`'s that are directly reachable for `d`.
 *     Transitively reachable definitions are not included nor is `d` itself.
 */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_d, __pyx_n_s_Definition) < 0) __PYX_ERR(0, 1687, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_kp_s_set_Definition) < 0) __PYX_ERR(0, 1687, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_6pytact_11data_reader_39definition_dependencies, 0, __pyx_n_s_definition_dependencies, NULL, __pyx_n_s_pytact_data_reader, __pyx_d, ((PyObject *)__pyx_codeobj__133)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1687, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_definition_dependencies, __pyx_t_2) < 0) __PYX_ERR(0, 1687, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "pytact/data_reader.pyx":1
 * # distutils: language = c++             # <<<<<<<<<<<<<<
 * # cython: c_string_type = str
 * # cython: c_string_encoding = default
 */
  __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;

  /* "vector.from_py":45
 * 
 * @cname("__pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___")
 * cdef vector[X] __pyx_convert_vector_from_py_std_3a__3a_vector_3c_uint32_t_3e___(object o) except *:             # <<<<<<<<<<<<<<
 *     cdef vector[X] v
 *     for item in o:
 */

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  if (__pyx_m) {
    if (__pyx_d && stringtab_initialized) {
      __Pyx_AddTraceback("init pytact.data_reader", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    #if !CYTHON_USE_MODULE_STATE
    Py_CLEAR(__pyx_m);
    #endif
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init pytact.data_reader");
  }
  __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
}
/* #### Code section: cleanup_globals ### */
/* #### Code section: cleanup_module ### */
/* #### Code section: main_method ### */
/* #### Code section: utility_code_pragmas ### */
#if _MSC_VER
#pragma warning( push )
/* Warning 4127: conditional expression is constant
 * Cython uses constant conditional expressions to allow in inline functions to be optimized at
 * compile-time, so this warning is not useful
 */
#pragma warning( disable : 4127 )
#endif



/* #### Code section: utility_code_def ### */

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

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

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

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

/* PyObjectGetAttrStrNoError */
static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        __Pyx_PyErr_Clear();
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) {
    PyObject *result;
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) {
        return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1);
    }
#endif
    result = __Pyx_PyObject_GetAttrStr(obj, attr_name);
    if (unlikely(!result)) {
        __Pyx_PyObject_GetAttrStr_ClearAttributeError();
    }
    return result;
}

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name);
    if (unlikely(!result) && !PyErr_Occurred()) {
        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;
}

/* TupleAndListFromArray */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
    PyObject *v;
    Py_ssize_t i;
    for (i = 0; i < length; i++) {
        v = dest[i] = src[i];
        Py_INCREF(v);
    }
}
static CYTHON_INLINE PyObject *
__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    if (n <= 0) {
        Py_INCREF(__pyx_empty_tuple);
        return __pyx_empty_tuple;
    }
    res = PyTuple_New(n);
    if (unlikely(res == NULL)) return NULL;
    __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n);
    return res;
}
static CYTHON_INLINE PyObject *
__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    if (n <= 0) {
        return PyList_New(0);
    }
    res = PyList_New(n);
    if (unlikely(res == NULL)) return NULL;
    __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n);
    return res;
}
#endif

/* BytesEquals */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API
    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_VERSION_HEX < 0x030B0000)
            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 || CYTHON_COMPILING_IN_LIMITED_API
    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
}

/* fastcall */
#if CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s)
{
    Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames);
    for (i = 0; i < n; i++)
    {
        if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i];
    }
    for (i = 0; i < n; i++)
    {
        int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ);
        if (unlikely(eq != 0)) {
            if (unlikely(eq < 0)) return NULL;  // error
            return kwvalues[i];
        }
    }
    return NULL;  // not found (no exception set)
}
#endif

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

/* 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 *const *kwvalues,
    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;
    int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds));
    while (1) {
        if (kwds_is_tuple) {
            if (pos >= PyTuple_GET_SIZE(kwds)) break;
            key = PyTuple_GET_ITEM(kwds, pos);
            value = kwvalues[pos];
            pos++;
        }
        else
        {
            if (!PyDict_Next(kwds, &pos, &key, &value)) break;
        }
        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_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 = (
                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                    (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(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
                        (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(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:
    #if PY_MAJOR_VERSION < 3
    PyErr_Format(PyExc_TypeError,
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
    PyErr_Format(PyExc_TypeError,
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

/* ArgTypeTest */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
{
    __Pyx_TypeName type_name;
    __Pyx_TypeName obj_type_name;
    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;
    }
    type_name = __Pyx_PyType_GetName(type);
    obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME
        ", got " __Pyx_FMT_TYPENAME ")", name, type_name, obj_type_name);
    __Pyx_DECREF_TypeName(type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return 0;
}

/* PyObjectCall */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = Py_TYPE(func)->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

/* PyFunctionFastCall */
#if CYTHON_FAST_PYCALL && !CYTHON_VECTORCALL
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;
}
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 (unlikely(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

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

/* PyObjectFastCall */
static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs) {
    PyObject *argstuple;
    PyObject *result;
    size_t i;
    argstuple = PyTuple_New((Py_ssize_t)nargs);
    if (unlikely(!argstuple)) return NULL;
    for (i = 0; i < nargs; i++) {
        Py_INCREF(args[i]);
        PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]);
    }
    result = __Pyx_PyObject_Call(func, argstuple, kwargs);
    Py_DECREF(argstuple);
    return result;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t _nargs, PyObject *kwargs) {
    Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs);
#if CYTHON_COMPILING_IN_CPYTHON
    if (nargs == 0 && kwargs == NULL) {
#ifdef __Pyx_CyFunction_USED
        if (__Pyx_IsCyOrPyCFunction(func))
#else
        if (PyCFunction_Check(func))
#endif
        {
            if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
                return __Pyx_PyObject_CallMethO(func, NULL);
            }
        }
    }
    else if (nargs == 1 && kwargs == NULL) {
        if (PyCFunction_Check(func))
        {
            if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
                return __Pyx_PyObject_CallMethO(func, args[0]);
            }
        }
    }
#endif
    #if PY_VERSION_HEX < 0x030800B1
    #if CYTHON_FAST_PYCCALL
    if (PyCFunction_Check(func)) {
        if (kwargs) {
            return _PyCFunction_FastCallDict(func, args, nargs, kwargs);
        } else {
            return _PyCFunction_FastCallKeywords(func, args, nargs, NULL);
        }
    }
    #if PY_VERSION_HEX >= 0x030700A1
    if (!kwargs && __Pyx_IS_TYPE(func, &PyMethodDescr_Type)) {
        return _PyMethodDescr_FastCallKeywords(func, args, nargs, NULL);
    }
    #endif
    #endif
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(func)) {
        return __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs);
    }
    #endif
    #endif
    #if CYTHON_VECTORCALL
    vectorcallfunc f = _PyVectorcall_Function(func);
    if (f) {
        return f(func, args, (size_t)nargs, kwargs);
    }
    #elif defined(__Pyx_CyFunction_USED) && CYTHON_BACKPORT_VECTORCALL
    if (__Pyx_CyFunction_CheckExact(func)) {
        __pyx_vectorcallfunc f = __Pyx_CyFunction_func_vectorcall(func);
        if (f) return f(func, args, (size_t)nargs, kwargs);
    }
    #endif
    if (nargs == 0) {
        return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs);
    }
    return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs);
}

/* 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 */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
    PyObject *arg = NULL;
    return __Pyx_PyObject_FastCall(func, (&arg)+1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* RaiseException */
#if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    __Pyx_PyThreadState_declare
    CYTHON_UNUSED_VAR(cause);
    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 ||  CYTHON_COMPILING_IN_LIMITED_API
        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

/* RaiseUnexpectedTypeError */
static int
__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj)
{
    __Pyx_TypeName obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME,
                 expected, obj_type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return 0;
}

/* PyObjectLookupSpecial */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) {
    PyObject *res;
    PyTypeObject *tp = Py_TYPE(obj);
#if PY_MAJOR_VERSION < 3
    if (unlikely(PyInstance_Check(obj)))
        return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name);
#endif
    res = _PyType_Lookup(tp, attr_name);
    if (likely(res)) {
        descrgetfunc f = Py_TYPE(res)->tp_descr_get;
        if (!f) {
            Py_INCREF(res);
        } else {
            res = f(res, obj, (PyObject *)tp);
        }
    } else if (with_error) {
        PyErr_SetObject(PyExc_AttributeError, attr_name);
    }
    return res;
}
#endif

/* PyDictVersioning */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
    PyObject **dictptr = NULL;
    Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
    if (offset) {
#if CYTHON_COMPILING_IN_CPYTHON
        dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
#else
        dictptr = _PyObject_GetDictPtr(obj);
#endif
    }
    return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
}
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
        return 0;
    return obj_dict_version == __Pyx_get_object_dict_version(obj);
}
#endif

/* GetModuleGlobalName */
#if CYTHON_USE_DICT_VERSIONS
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
#else
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
#endif
{
    PyObject *result;
#if !CYTHON_AVOID_BORROWED_REFS
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
    result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    } else if (unlikely(PyErr_Occurred())) {
        return NULL;
    }
#elif CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(!__pyx_m)) {
        return NULL;
    }
    result = PyObject_GetAttr(__pyx_m, name);
    if (likely(result)) {
        return result;
    }
#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);
}

/* 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_value == NULL || exc_info->exc_value == 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 && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    PyObject *exc_value = exc_info->exc_value;
    if (exc_value == NULL || exc_value == Py_None) {
        *value = NULL;
        *type = NULL;
        *tb = NULL;
    } else {
        *value = exc_value;
        Py_INCREF(*value);
        *type = (PyObject*) Py_TYPE(exc_value);
        Py_INCREF(*type);
        *tb = PyException_GetTraceback(exc_value);
    }
  #elif 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;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
  #else
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
  #endif
}
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
  #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = tstate->exc_info;
    PyObject *tmp_value = exc_info->exc_value;
    exc_info->exc_value = value;
    Py_XDECREF(tmp_value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
  #else
    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
}
#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;
      #if PY_VERSION_HEX >= 0x030B00a4
        tmp_value = exc_info->exc_value;
        exc_info->exc_value = local_value;
        tmp_type = NULL;
        tmp_tb = NULL;
        Py_XDECREF(local_type);
        Py_XDECREF(local_tb);
      #else
        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;
      #endif
    }
    #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;
}

/* FixUpExtensionType */
#if CYTHON_USE_TYPE_SPECS
static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) {
#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    (void) spec;
    (void) type;
#else
    const PyType_Slot *slot = spec->slots;
    while (slot && slot->slot && slot->slot != Py_tp_members)
        slot++;
    if (slot && slot->slot == Py_tp_members) {
        int changed = 0;
#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON)
        const
#endif
            PyMemberDef *memb = (PyMemberDef*) slot->pfunc;
        while (memb && memb->name) {
            if (memb->name[0] == '_' && memb->name[1] == '_') {
#if PY_VERSION_HEX < 0x030900b1
                if (strcmp(memb->name, "__weaklistoffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_weaklistoffset = memb->offset;
                    changed = 1;
                }
                else if (strcmp(memb->name, "__dictoffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_dictoffset = memb->offset;
                    changed = 1;
                }
#if CYTHON_METH_FASTCALL
                else if (strcmp(memb->name, "__vectorcalloffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
#if PY_VERSION_HEX >= 0x030800b4
                    type->tp_vectorcall_offset = memb->offset;
#else
                    type->tp_print = (printfunc) memb->offset;
#endif
                    changed = 1;
                }
#endif
#else
                if ((0));
#endif
#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON
                else if (strcmp(memb->name, "__module__") == 0) {
                    PyObject *descr;
                    assert(memb->type == T_OBJECT);
                    assert(memb->flags == 0 || memb->flags == READONLY);
                    descr = PyDescr_NewMember(type, memb);
                    if (unlikely(!descr))
                        return -1;
                    if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) {
                        Py_DECREF(descr);
                        return -1;
                    }
                    Py_DECREF(descr);
                    changed = 1;
                }
#endif
            }
            memb++;
        }
        if (changed)
            PyType_Modified(type);
    }
#endif
    return 0;
}
#endif

/* FetchSharedCythonModule */
static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
    PyObject *abi_module = PyImport_AddModule((char*) __PYX_ABI_MODULE_NAME);
    if (unlikely(!abi_module)) return NULL;
    Py_INCREF(abi_module);
    return abi_module;
}

/* FetchCommonType */
static int __Pyx_VerifyCachedType(PyObject *cached_type,
                               const char *name,
                               Py_ssize_t basicsize,
                               Py_ssize_t expected_basicsize) {
    if (!PyType_Check(cached_type)) {
        PyErr_Format(PyExc_TypeError,
            "Shared Cython type %.200s is not a type object", name);
        return -1;
    }
    if (basicsize != expected_basicsize) {
        PyErr_Format(PyExc_TypeError,
            "Shared Cython type %.200s has the wrong size, try recompiling",
            name);
        return -1;
    }
    return 0;
}
#if !CYTHON_USE_TYPE_SPECS
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
    PyObject* abi_module;
    const char* object_name;
    PyTypeObject *cached_type = NULL;
    abi_module = __Pyx_FetchSharedCythonABIModule();
    if (!abi_module) return NULL;
    object_name = strrchr(type->tp_name, '.');
    object_name = object_name ? object_name+1 : type->tp_name;
    cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name);
    if (cached_type) {
        if (__Pyx_VerifyCachedType(
              (PyObject *)cached_type,
              object_name,
              cached_type->tp_basicsize,
              type->tp_basicsize) < 0) {
            goto bad;
        }
        goto done;
    }
    if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
    PyErr_Clear();
    if (PyType_Ready(type) < 0) goto bad;
    if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0)
        goto bad;
    Py_INCREF(type);
    cached_type = type;
done:
    Py_DECREF(abi_module);
    return cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}
#else
static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) {
    PyObject *abi_module, *cached_type = NULL;
    const char* object_name = strrchr(spec->name, '.');
    object_name = object_name ? object_name+1 : spec->name;
    abi_module = __Pyx_FetchSharedCythonABIModule();
    if (!abi_module) return NULL;
    cached_type = PyObject_GetAttrString(abi_module, object_name);
    if (cached_type) {
        Py_ssize_t basicsize;
#if CYTHON_COMPILING_IN_LIMITED_API
        PyObject *py_basicsize;
        py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__");
        if (unlikely(!py_basicsize)) goto bad;
        basicsize = PyLong_AsSsize_t(py_basicsize);
        Py_DECREF(py_basicsize);
        py_basicsize = 0;
        if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
#else
        basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1;
#endif
        if (__Pyx_VerifyCachedType(
              cached_type,
              object_name,
              basicsize,
              spec->basicsize) < 0) {
            goto bad;
        }
        goto done;
    }
    if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
    PyErr_Clear();
    (void) module;
    cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases);
    if (unlikely(!cached_type)) goto bad;
    if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad;
    if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad;
done:
    Py_DECREF(abi_module);
    assert(cached_type == NULL || PyType_Check(cached_type));
    return (PyTypeObject *) cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}
#endif

/* PyVectorcallFastCallDict */
#if CYTHON_METH_FASTCALL
static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
{
    PyObject *res = NULL;
    PyObject *kwnames;
    PyObject **newargs;
    PyObject **kwvalues;
    Py_ssize_t i, pos;
    size_t j;
    PyObject *key, *value;
    unsigned long keys_are_strings;
    Py_ssize_t nkw = PyDict_GET_SIZE(kw);
    newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0]));
    if (unlikely(newargs == NULL)) {
        PyErr_NoMemory();
        return NULL;
    }
    for (j = 0; j < nargs; j++) newargs[j] = args[j];
    kwnames = PyTuple_New(nkw);
    if (unlikely(kwnames == NULL)) {
        PyMem_Free(newargs);
        return NULL;
    }
    kwvalues = newargs + nargs;
    pos = i = 0;
    keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS;
    while (PyDict_Next(kw, &pos, &key, &value)) {
        keys_are_strings &= Py_TYPE(key)->tp_flags;
        Py_INCREF(key);
        Py_INCREF(value);
        PyTuple_SET_ITEM(kwnames, i, key);
        kwvalues[i] = value;
        i++;
    }
    if (unlikely(!keys_are_strings)) {
        PyErr_SetString(PyExc_TypeError, "keywords must be strings");
        goto cleanup;
    }
    res = vc(func, newargs, nargs, kwnames);
cleanup:
    Py_DECREF(kwnames);
    for (i = 0; i < nkw; i++)
        Py_DECREF(kwvalues[i]);
    PyMem_Free(newargs);
    return res;
}
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
{
    if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) {
        return vc(func, args, nargs, NULL);
    }
    return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw);
}
#endif

/* CythonFunctionShared */
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) {
#if PY_VERSION_HEX < 0x030900B1
    __Pyx_Py_XDECREF_SET(
        __Pyx_CyFunction_GetClassObj(f),
            ((classobj) ? __Pyx_NewRef(classobj) : NULL));
#else
    __Pyx_Py_XDECREF_SET(
        ((PyCMethodObject *) (f))->mm_class,
        (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL));
#endif
}
static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure)
{
    CYTHON_UNUSED_VAR(closure);
    if (unlikely(op->func_doc == NULL)) {
        if (((PyCFunctionObject*)op)->m_ml->ml_doc) {
#if PY_MAJOR_VERSION >= 3
            op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc);
#else
            op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->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, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (value == NULL) {
        value = Py_None;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_doc, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(op->func_name == NULL)) {
#if PY_MAJOR_VERSION >= 3
        op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name);
#else
        op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->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, void *context)
{
    CYTHON_UNUSED_VAR(context);
#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;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_name, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(op->func_qualname);
    return op->func_qualname;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
#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;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_qualname, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(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, void *context)
{
    CYTHON_UNUSED_VAR(context);
    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;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_dict, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(op->func_globals);
    return op->func_globals;
}
static PyObject *
__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(op);
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    CYTHON_UNUSED_VAR(context);
    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, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyTuple_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->defaults_tuple, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = op->defaults_tuple;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__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, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = op->defaults_kwdict;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__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, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value || value == Py_None) {
        value = NULL;
    } else if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    __Pyx_Py_XDECREF_SET(op->func_annotations, value);
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = op->func_annotations;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!result)) {
        result = PyDict_New();
        if (unlikely(!result)) return NULL;
        op->func_annotations = result;
    }
    Py_INCREF(result);
    return result;
}
static PyObject *
__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) {
    int is_coroutine;
    CYTHON_UNUSED_VAR(context);
    if (op->func_is_coroutine) {
        return __Pyx_NewRef(op->func_is_coroutine);
    }
    is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE;
#if PY_VERSION_HEX >= 0x03050000
    if (is_coroutine) {
        PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine;
        fromlist = PyList_New(1);
        if (unlikely(!fromlist)) return NULL;
        Py_INCREF(marker);
        PyList_SET_ITEM(fromlist, 0, marker);
        module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0);
        Py_DECREF(fromlist);
        if (unlikely(!module)) goto ignore;
        op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker);
        Py_DECREF(module);
        if (likely(op->func_is_coroutine)) {
            return __Pyx_NewRef(op->func_is_coroutine);
        }
ignore:
        PyErr_Clear();
    }
#endif
    op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine);
    return __Pyx_NewRef(op->func_is_coroutine);
}
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 *) "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},
    {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0},
    {0, 0, 0, 0, 0}
};
static PyMemberDef __pyx_CyFunction_members[] = {
    {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0},
#if CYTHON_USE_TYPE_SPECS
    {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0},
#if CYTHON_METH_FASTCALL
#if CYTHON_BACKPORT_VECTORCALL
    {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0},
#else
    {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0},
#endif
#endif
#if PY_VERSION_HEX < 0x030500A0
    {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0},
#else
    {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0},
#endif
#endif
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args)
{
    CYTHON_UNUSED_VAR(args);
#if PY_MAJOR_VERSION >= 3
    Py_INCREF(m->func_qualname);
    return m->func_qualname;
#else
    return PyString_FromString(((PyCFunctionObject*)m)->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) (((PyCFunctionObject*)cyfunc)->m_weakreflist)
#endif
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname,
                                       PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
    PyCFunctionObject *cf = (PyCFunctionObject*) op;
    if (unlikely(op == NULL))
        return NULL;
    op->flags = flags;
    __Pyx_CyFunction_weakreflist(op) = NULL;
    cf->m_ml = ml;
    cf->m_self = (PyObject *) op;
    Py_XINCREF(closure);
    op->func_closure = closure;
    Py_XINCREF(module);
    cf->m_module = module;
    op->func_dict = NULL;
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
#if PY_VERSION_HEX < 0x030900B1
    op->func_classobj = NULL;
#else
    ((PyCMethodObject*)op)->mm_class = NULL;
#endif
    op->func_globals = globals;
    Py_INCREF(op->func_globals);
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults_pyobjects = 0;
    op->defaults_size = 0;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    op->func_is_coroutine = NULL;
#if CYTHON_METH_FASTCALL
    switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) {
    case METH_NOARGS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS;
        break;
    case METH_O:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O;
        break;
    case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD;
        break;
    case METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS;
        break;
    case METH_VARARGS | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = NULL;
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
        Py_DECREF(op);
        return NULL;
    }
#endif
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
    Py_CLEAR(((PyCFunctionObject*)m)->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);
#if PY_VERSION_HEX < 0x030900B1
    Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
#else
    {
        PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class;
        ((PyCMethodObject *) (m))->mm_class = NULL;
        Py_XDECREF(cls);
    }
#endif
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    Py_CLEAR(m->func_is_coroutine);
    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);
    __Pyx_PyHeapTypeObject_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(((PyCFunctionObject*)m)->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(__Pyx_CyFunction_GetClassObj(m));
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    Py_VISIT(m->func_is_coroutine);
    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_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 for CyFunction");
        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 CYTHON_METH_FASTCALL
     __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc);
    if (vc) {
#if CYTHON_ASSUME_SAFE_MACROS
        return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw);
#else
        (void) &__Pyx_PyVectorcall_FastCallDict;
        return PyVectorcall_Call(func, args, kw);
#endif
    }
#endif
    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);
            PyErr_Format(PyExc_TypeError,
                         "unbound method %.200S() needs an argument",
                         cyfunc->func_qualname);
            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;
}
#if CYTHON_METH_FASTCALL
static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames)
{
    int ret = 0;
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        if (unlikely(nargs < 1)) {
            PyErr_Format(PyExc_TypeError, "%.200s() needs an argument",
                         ((PyCFunctionObject*)cyfunc)->m_ml->ml_name);
            return -1;
        }
        ret = 1;
    }
    if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) {
        PyErr_Format(PyExc_TypeError,
                     "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name);
        return -1;
    }
    return ret;
}
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml;
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
        self = ((PyCFunctionObject*)cyfunc)->m_self;
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 0)) {
        PyErr_Format(PyExc_TypeError,
            "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
            def->ml_name, nargs);
        return NULL;
    }
    return def->ml_meth(self, NULL);
}
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml;
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
        self = ((PyCFunctionObject*)cyfunc)->m_self;
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 1)) {
        PyErr_Format(PyExc_TypeError,
            "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
            def->ml_name, nargs);
        return NULL;
    }
    return def->ml_meth(self, args[0]);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml;
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
        self = ((PyCFunctionObject*)cyfunc)->m_self;
        break;
    default:
        return NULL;
    }
    return ((_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml;
    PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc);
#if CYTHON_BACKPORT_VECTORCALL
    Py_ssize_t nargs = (Py_ssize_t)nargsf;
#else
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
#endif
    PyObject *self;
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
        self = ((PyCFunctionObject*)cyfunc)->m_self;
        break;
    default:
        return NULL;
    }
    return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames);
}
#endif
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_CyFunctionType_slots[] = {
    {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc},
    {Py_tp_repr, (void *)__Pyx_CyFunction_repr},
    {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod},
    {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse},
    {Py_tp_clear, (void *)__Pyx_CyFunction_clear},
    {Py_tp_methods, (void *)__pyx_CyFunction_methods},
    {Py_tp_members, (void *)__pyx_CyFunction_members},
    {Py_tp_getset, (void *)__pyx_CyFunction_getsets},
    {Py_tp_descr_get, (void *)__Pyx_PyMethod_New},
    {0, 0},
};
static PyType_Spec __pyx_CyFunctionType_spec = {
    __PYX_TYPE_MODULE_PREFIX "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR
    Py_TPFLAGS_METHOD_DESCRIPTOR |
#endif
#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL)
    _Py_TPFLAGS_HAVE_VECTORCALL |
#endif
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
    __pyx_CyFunctionType_slots
};
#else
static PyTypeObject __pyx_CyFunctionType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    __PYX_TYPE_MODULE_PREFIX "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
    (destructor) __Pyx_CyFunction_dealloc,
#if !CYTHON_METH_FASTCALL
    0,
#elif CYTHON_BACKPORT_VECTORCALL
    (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall),
#else
    offsetof(PyCFunctionObject, vectorcall),
#endif
    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,
#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR
    Py_TPFLAGS_METHOD_DESCRIPTOR |
#endif
#ifdef _Py_TPFLAGS_HAVE_VECTORCALL
    _Py_TPFLAGS_HAVE_VECTORCALL |
#endif
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
    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_PyMethod_New,
    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 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
    0,
#endif
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
    0,
#endif
};
#endif
static int __pyx_CyFunction_init(PyObject *module) {
#if CYTHON_USE_TYPE_SPECS
    __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL);
#else
    (void) module;
    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
#endif
    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;
    m->defaults_size = size;
    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);
}

/* CythonFunction */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname,
                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
    PyObject *op = __Pyx_CyFunction_Init(
        PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType),
        ml, flags, qualname, closure, module, globals, code
    );
    if (likely(op)) {
        PyObject_GC_Track(op);
    }
    return op;
}

/* PyObjectCallOneArg */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *args[2] = {NULL, arg};
    return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* RaiseTooManyValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
    PyErr_Format(PyExc_ValueError,
                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
}

/* RaiseNeedMoreValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
    PyErr_Format(PyExc_ValueError,
                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
                 index, (index == 1) ? "" : "s");
}

/* IterFinish */
static CYTHON_INLINE int __Pyx_IterFinish(void) {
#if CYTHON_FAST_THREAD_STATE
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject* exc_type = tstate->curexc_type;
    if (unlikely(exc_type)) {
        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
            PyObject *exc_value, *exc_tb;
            exc_value = tstate->curexc_value;
            exc_tb = tstate->curexc_traceback;
            tstate->curexc_type = 0;
            tstate->curexc_value = 0;
            tstate->curexc_traceback = 0;
            Py_DECREF(exc_type);
            Py_XDECREF(exc_value);
            Py_XDECREF(exc_tb);
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#else
    if (unlikely(PyErr_Occurred())) {
        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
            PyErr_Clear();
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#endif
}

/* UnpackItemEndCheck */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
    if (unlikely(retval)) {
        Py_DECREF(retval);
        __Pyx_RaiseTooManyValuesError(expected);
        return -1;
    }
    return __Pyx_IterFinish();
}

/* JoinPyUnicode */
static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength,
                                      Py_UCS4 max_char) {
#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    PyObject *result_uval;
    int result_ukind, kind_shift;
    Py_ssize_t i, char_pos;
    void *result_udata;
    CYTHON_MAYBE_UNUSED_VAR(max_char);
#if CYTHON_PEP393_ENABLED
    result_uval = PyUnicode_New(result_ulength, max_char);
    if (unlikely(!result_uval)) return NULL;
    result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND;
    kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1;
    result_udata = PyUnicode_DATA(result_uval);
#else
    result_uval = PyUnicode_FromUnicode(NULL, result_ulength);
    if (unlikely(!result_uval)) return NULL;
    result_ukind = sizeof(Py_UNICODE);
    kind_shift = (result_ukind == 4) ? 2 : result_ukind - 1;
    result_udata = PyUnicode_AS_UNICODE(result_uval);
#endif
    assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0);
    char_pos = 0;
    for (i=0; i < value_count; i++) {
        int ukind;
        Py_ssize_t ulength;
        void *udata;
        PyObject *uval = PyTuple_GET_ITEM(value_tuple, i);
        if (unlikely(__Pyx_PyUnicode_READY(uval)))
            goto bad;
        ulength = __Pyx_PyUnicode_GET_LENGTH(uval);
        if (unlikely(!ulength))
            continue;
        if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos))
            goto overflow;
        ukind = __Pyx_PyUnicode_KIND(uval);
        udata = __Pyx_PyUnicode_DATA(uval);
        if (!CYTHON_PEP393_ENABLED || ukind == result_ukind) {
            memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift));
        } else {
            #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030300F0 || defined(_PyUnicode_FastCopyCharacters)
            _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength);
            #else
            Py_ssize_t j;
            for (j=0; j < ulength; j++) {
                Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j);
                __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar);
            }
            #endif
        }
        char_pos += ulength;
    }
    return result_uval;
overflow:
    PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string");
bad:
    Py_DECREF(result_uval);
    return NULL;
#else
    CYTHON_UNUSED_VAR(max_char);
    CYTHON_UNUSED_VAR(result_ulength);
    CYTHON_UNUSED_VAR(value_count);
    return PyUnicode_Join(__pyx_empty_unicode, value_tuple);
#endif
}

/* GetItemInt */
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (unlikely(!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 {
        PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping;
        PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence;
        if (mm && mm->mp_subscript) {
            PyObject *r, *key = PyInt_FromSsize_t(i);
            if (unlikely(!key)) return NULL;
            r = mm->mp_subscript(o, key);
            Py_DECREF(key);
            return r;
        }
        if (likely(sm && sm->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) {
                Py_ssize_t l = sm->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return NULL;
                    PyErr_Clear();
                }
            }
            return sm->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));
}

/* SliceObject */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
        Py_ssize_t cstart, Py_ssize_t cstop,
        PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice,
        int has_cstart, int has_cstop, int wraparound) {
    __Pyx_TypeName obj_type_name;
#if CYTHON_USE_TYPE_SLOTS
    PyMappingMethods* mp;
#if PY_MAJOR_VERSION < 3
    PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
    if (likely(ms && ms->sq_slice)) {
        if (!has_cstart) {
            if (_py_start && (*_py_start != Py_None)) {
                cstart = __Pyx_PyIndex_AsSsize_t(*_py_start);
                if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstart = 0;
        }
        if (!has_cstop) {
            if (_py_stop && (*_py_stop != Py_None)) {
                cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop);
                if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad;
            } else
                cstop = PY_SSIZE_T_MAX;
        }
        if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) {
            Py_ssize_t l = ms->sq_length(obj);
            if (likely(l >= 0)) {
                if (cstop < 0) {
                    cstop += l;
                    if (cstop < 0) cstop = 0;
                }
                if (cstart < 0) {
                    cstart += l;
                    if (cstart < 0) cstart = 0;
                }
            } else {
                if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                    goto bad;
                PyErr_Clear();
            }
        }
        return ms->sq_slice(obj, cstart, cstop);
    }
#else
    CYTHON_UNUSED_VAR(wraparound);
#endif
    mp = Py_TYPE(obj)->tp_as_mapping;
    if (likely(mp && mp->mp_subscript))
#else
    CYTHON_UNUSED_VAR(wraparound);
#endif
    {
        PyObject* result;
        PyObject *py_slice, *py_start, *py_stop;
        if (_py_slice) {
            py_slice = *_py_slice;
        } else {
            PyObject* owned_start = NULL;
            PyObject* owned_stop = NULL;
            if (_py_start) {
                py_start = *_py_start;
            } else {
                if (has_cstart) {
                    owned_start = py_start = PyInt_FromSsize_t(cstart);
                    if (unlikely(!py_start)) goto bad;
                } else
                    py_start = Py_None;
            }
            if (_py_stop) {
                py_stop = *_py_stop;
            } else {
                if (has_cstop) {
                    owned_stop = py_stop = PyInt_FromSsize_t(cstop);
                    if (unlikely(!py_stop)) {
                        Py_XDECREF(owned_start);
                        goto bad;
                    }
                } else
                    py_stop = Py_None;
            }
            py_slice = PySlice_New(py_start, py_stop, Py_None);
            Py_XDECREF(owned_start);
            Py_XDECREF(owned_stop);
            if (unlikely(!py_slice)) goto bad;
        }
#if CYTHON_USE_TYPE_SLOTS
        result = mp->mp_subscript(obj, py_slice);
#else
        result = PyObject_GetItem(obj, py_slice);
#endif
        if (!_py_slice) {
            Py_DECREF(py_slice);
        }
        return result;
    }
    obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError,
        "'" __Pyx_FMT_TYPENAME "' object is unsliceable", obj_type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
bad:
    return NULL;
}

/* PyIntBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(intval);
    CYTHON_MAYBE_UNUSED_VAR(inplace);
    CYTHON_UNUSED_VAR(zerodivision_check);
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long x;
        long a = PyInt_AS_LONG(op1);
        
            x = (long)((unsigned long)a + b);
            if (likely((x^a) >= 0 || (x^b) >= 0))
                return PyInt_FromLong(x);
            return PyLong_Type.tp_as_number->nb_add(op1, op2);
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        const long b = intval;
        long a, x;
#ifdef HAVE_LONG_LONG
        const PY_LONG_LONG llb = intval;
        PY_LONG_LONG lla, llx;
#endif
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        const Py_ssize_t size = Py_SIZE(op1);
        if (unlikely(size == 0)) {
            return __Pyx_NewRef(op2);
        }
        if (likely(__Pyx_sst_abs(size) <= 1)) {
            a = likely(size) ? digits[0] : 0;
            if (size == -1) a = -a;
        } else {
            switch (size) {
                case -2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case 2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case -3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case 3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case -4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case 4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
            }
        }
                x = a + b;
            return PyLong_FromLong(x);
#ifdef HAVE_LONG_LONG
        long_long:
                llx = lla + llb;
            return PyLong_FromLongLong(llx);
#endif
        
        
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        const long b = intval;
#if CYTHON_COMPILING_IN_LIMITED_API
        double a = __pyx_PyFloat_AsDouble(op1);
#else
        double a = PyFloat_AS_DOUBLE(op1);
#endif
            double result;
            
            PyFPE_START_PROTECT("add", return NULL)
            result = ((double)a) + (double)b;
            PyFPE_END_PROTECT(result)
            return PyFloat_FromDouble(result);
    }
    return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
}
#endif

/* ObjectGetItem */
#if CYTHON_USE_TYPE_SLOTS
static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) {
    PyObject *runerr;
    Py_ssize_t key_value;
    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)) {
        __Pyx_TypeName index_type_name = __Pyx_PyType_GetName(Py_TYPE(index));
        PyErr_Clear();
        PyErr_Format(PyExc_IndexError,
            "cannot fit '" __Pyx_FMT_TYPENAME "' into an index-sized integer", index_type_name);
        __Pyx_DECREF_TypeName(index_type_name);
    }
    return NULL;
}
static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *key) {
    __Pyx_TypeName obj_type_name;
    if (likely(PyType_Check(obj))) {
        PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(obj, __pyx_n_s_class_getitem);
        if (meth) {
            PyObject *result = __Pyx_PyObject_CallOneArg(meth, key);
            Py_DECREF(meth);
            return result;
        }
    }
    obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError,
        "'" __Pyx_FMT_TYPENAME "' object is not subscriptable", obj_type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return NULL;
}
static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) {
    PyTypeObject *tp = Py_TYPE(obj);
    PyMappingMethods *mm = tp->tp_as_mapping;
    PySequenceMethods *sm = tp->tp_as_sequence;
    if (likely(mm && mm->mp_subscript)) {
        return mm->mp_subscript(obj, key);
    }
    if (likely(sm && sm->sq_item)) {
        return __Pyx_PyObject_GetIndex(obj, key);
    }
    return __Pyx_PyObject_GetItem_Slow(obj, key);
}
#endif

/* KeywordStringCheck */
static int __Pyx_CheckKeywordStrings(
    PyObject *kw,
    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(kw, &pos, &key, 0))
        goto invalid_keyword;
    return 1;
#else
    if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kw))) {
        if (unlikely(PyTuple_GET_SIZE(kw) == 0))
            return 1;
        if (!kw_allowed) {
            key = PyTuple_GET_ITEM(kw, 0);
            goto invalid_keyword;
        }
#if PY_VERSION_HEX < 0x03090000
        for (pos = 0; pos < PyTuple_GET_SIZE(kw); pos++) {
            key = PyTuple_GET_ITEM(kw, pos);
            if (unlikely(!PyUnicode_Check(key)))
                goto invalid_keyword_type;
        }
#endif
        return 1;
    }
    while (PyDict_Next(kw, &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:
    #if PY_MAJOR_VERSION < 3
    PyErr_Format(PyExc_TypeError,
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
    PyErr_Format(PyExc_TypeError,
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
    return 0;
}

/* PyIntCompare */
static CYTHON_INLINE PyObject* __Pyx_PyInt_NeObjC(PyObject *op1, PyObject *op2, long intval, long inplace) {
    CYTHON_MAYBE_UNUSED_VAR(intval);
    CYTHON_UNUSED_VAR(inplace);
    if (op1 == op2) {
        Py_RETURN_FALSE;
    }
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long a = PyInt_AS_LONG(op1);
        if (a != b) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        int unequal;
        unsigned long uintval;
        Py_ssize_t size = Py_SIZE(op1);
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        if (intval == 0) {
            if (size != 0) Py_RETURN_TRUE; else Py_RETURN_FALSE;
        } else if (intval < 0) {
            if (size >= 0)
                Py_RETURN_TRUE;
            intval = -intval;
            size = -size;
        } else {
            if (size <= 0)
                Py_RETURN_TRUE;
        }
        uintval = (unsigned long) intval;
#if PyLong_SHIFT * 4 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 4)) {
            unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 3 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 3)) {
            unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 2 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 2)) {
            unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 1 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 1)) {
            unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
            unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK));
        if (unequal != 0) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        const long b = intval;
#if CYTHON_COMPILING_IN_LIMITED_API
        double a = __pyx_PyFloat_AsDouble(op1);
#else
        double a = PyFloat_AS_DOUBLE(op1);
#endif
        if ((double)a != (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    return (
        PyObject_RichCompare(op1, op2, Py_NE));
}

/* UnicodeConcatInPlace */
# if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
static int
__Pyx_unicode_modifiable(PyObject *unicode)
{
    if (Py_REFCNT(unicode) != 1)
        return 0;
    if (!PyUnicode_CheckExact(unicode))
        return 0;
    if (PyUnicode_CHECK_INTERNED(unicode))
        return 0;
    return 1;
}
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right
        #if CYTHON_REFNANNY
        , void* __pyx_refnanny
        #endif
    ) {
    PyObject *left = *p_left;
    Py_ssize_t left_len, right_len, new_len;
    if (unlikely(__Pyx_PyUnicode_READY(left) == -1))
        return NULL;
    if (unlikely(__Pyx_PyUnicode_READY(right) == -1))
        return NULL;
    left_len = PyUnicode_GET_LENGTH(left);
    if (left_len == 0) {
        Py_INCREF(right);
        return right;
    }
    right_len = PyUnicode_GET_LENGTH(right);
    if (right_len == 0) {
        Py_INCREF(left);
        return left;
    }
    if (unlikely(left_len > PY_SSIZE_T_MAX - right_len)) {
        PyErr_SetString(PyExc_OverflowError,
                        "strings are too large to concat");
        return NULL;
    }
    new_len = left_len + right_len;
    if (__Pyx_unicode_modifiable(left)
            && PyUnicode_CheckExact(right)
            && PyUnicode_KIND(right) <= PyUnicode_KIND(left)
            && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right))) {
        __Pyx_GIVEREF(*p_left);
        if (unlikely(PyUnicode_Resize(p_left, new_len) != 0)) {
            __Pyx_GOTREF(*p_left);
            return NULL;
        }
        __Pyx_INCREF(*p_left);
        _PyUnicode_FastCopyCharacters(*p_left, left_len, right, 0, right_len);
        return *p_left;
    } else {
        return __Pyx_PyUnicode_Concat(left, right);
    }
  }
#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 && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_value = exc_info->exc_value;
    exc_info->exc_value = *value;
    if (tmp_value == NULL || tmp_value == Py_None) {
        Py_XDECREF(tmp_value);
        tmp_value = NULL;
        tmp_type = NULL;
        tmp_tb = NULL;
    } else {
        tmp_type = (PyObject*) Py_TYPE(tmp_value);
        Py_INCREF(tmp_type);
        tmp_tb = PyException_GetTraceback(tmp_value);
    }
  #elif 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

/* PyObjectCall2Args */
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
    PyObject *args[3] = {NULL, arg1, arg2};
    return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* 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
    __Pyx_TypeName type_name;
    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 defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR
        if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR))
#elif PY_MAJOR_VERSION >= 3
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr) || __Pyx_IS_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 (likely(descr != NULL)) {
        *method = descr;
        return 0;
    }
    type_name = __Pyx_PyType_GetName(tp);
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'",
                 type_name, name);
#else
                 "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'",
                 type_name, PyString_AS_STRING(name));
#endif
    __Pyx_DECREF_TypeName(type_name);
    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 <frameobject.h>
#if PY_VERSION_HEX >= 0x030b00a6
  #ifndef Py_BUILD_CORE
    #define Py_BUILD_CORE 1
  #endif
  #include "internal/pycore_frame.h"
#endif
#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom)
static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) {
    PyObject *et, *ev, *tb;
    PyObject *value = NULL;
    CYTHON_UNUSED_VAR(__pyx_tstate);
    __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 (likely(__Pyx_IS_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) {
#if PY_VERSION_HEX >= 0x030B00a4
    Py_CLEAR(exc_state->exc_value);
#else
    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);
#endif
}
#define __Pyx_Coroutine_AlreadyRunningError(gen)  (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) {
    const char *msg;
    CYTHON_MAYBE_UNUSED_VAR(gen);
    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(PyObject *gen) {
    const char *msg;
    CYTHON_MAYBE_UNUSED_VAR(gen);
    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(PyObject *gen, PyObject *value, int closing) {
    CYTHON_MAYBE_UNUSED_VAR(gen);
    CYTHON_MAYBE_UNUSED_VAR(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_value) {
        #if CYTHON_COMPILING_IN_PYPY
        #else
        PyObject *exc_tb;
        #if PY_VERSION_HEX >= 0x030B00a4
        exc_tb = PyException_GetTraceback(exc_state->exc_value);
        #else
        exc_tb = exc_state->exc_traceback;
        #endif
        if (exc_tb) {
            PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
            PyFrameObject *f = tb->tb_frame;
            assert(f->f_back == NULL);
            #if PY_VERSION_HEX >= 0x030B00A1
            f->f_back = PyThreadState_GetFrame(tstate);
            #else
            Py_XINCREF(tstate->frame);
            f->f_back = tstate->frame;
            #endif
            #if PY_VERSION_HEX >= 0x030B00a4
            Py_DECREF(exc_tb);
            #endif
        }
        #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(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) {
#if CYTHON_COMPILING_IN_PYPY
#else
    PyObject *exc_tb;
    #if PY_VERSION_HEX >= 0x030B00a4
    if (!exc_state->exc_value) return;
    exc_tb = PyException_GetTraceback(exc_state->exc_value);
    #else
    exc_tb = exc_state->exc_traceback;
    #endif
    if (likely(exc_tb)) {
        PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
        PyFrameObject *f = tb->tb_frame;
        Py_CLEAR(f->f_back);
        #if PY_VERSION_HEX >= 0x030B00a4
        Py_DECREF(exc_tb);
        #endif
    }
#endif
}
static CYTHON_INLINE
PyObject *__Pyx_Coroutine_MethodReturn(PyObject* gen, PyObject *retval) {
    CYTHON_MAYBE_UNUSED_VAR(gen);
    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;
}
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
static CYTHON_INLINE
PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) {
#if PY_VERSION_HEX <= 0x030A00A1
    return _PyGen_Send(gen, arg);
#else
    PyObject *result;
    if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) {
        if (PyAsyncGen_CheckExact(gen)) {
            assert(result == Py_None);
            PyErr_SetNone(PyExc_StopAsyncIteration);
        }
        else if (result == Py_None) {
            PyErr_SetNone(PyExc_StopIteration);
        }
        else {
            _PyGen_SetStopIterationValue(result);
        }
        Py_CLEAR(result);
    }
    return result;
#endif
}
#endif
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 = __Pyx_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 = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
        } else
        #endif
        {
            if (value == Py_None)
                ret = __Pyx_PyObject_GetIterNextFunc(yf)(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_GetAttrStrNoError(yf, __pyx_n_s_close);
        if (unlikely(!meth)) {
            if (unlikely(PyErr_Occurred())) {
                PyErr_WriteUnraisable(yf);
            }
        } else {
            retval = __Pyx_PyObject_CallNoArg(meth);
            Py_DECREF(meth);
            if (unlikely(!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 = __Pyx_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 = __Pyx_PyObject_GetIterNextFunc(yf)(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, PyObject *arg) {
    CYTHON_UNUSED_VAR(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_GetAttrStrNoError(yf, __pyx_n_s_throw);
            if (unlikely(!meth)) {
                Py_DECREF(yf);
                if (unlikely(PyErr_Occurred())) {
                    gen->is_running = 0;
                    return NULL;
                }
                __Pyx_Coroutine_Undelegate(gen);
                gen->is_running = 0;
                goto throw_here;
            }
            if (likely(args)) {
                ret = __Pyx_PyObject_Call(meth, args, NULL);
            } else {
                PyObject *cargs[4] = {NULL, typ, val, tb};
                ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
            }
            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 (unlikely(!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) {
#if PY_VERSION_HEX >= 0x030B00a4
    Py_VISIT(exc_state->exc_value);
#else
    Py_VISIT(exc_state->exc_type);
    Py_VISIT(exc_state->exc_value);
    Py_VISIT(exc_state->exc_traceback);
#endif
    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_frame);
    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 (unlikely(PyObject_CallFinalizerFromDealloc(self)))
#else
        Py_TYPE(gen)->tp_del(self);
        if (unlikely(Py_REFCNT(self) > 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);
    __Pyx_PyHeapTypeObject_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);
    __Pyx_SET_REFCNT(self, 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(Py_REFCNT(self) > 0);
    if (likely(--self->ob_refcnt == 0)) {
        return;
    }
    {
        Py_ssize_t refcnt = Py_REFCNT(self);
        _Py_NewReference(self);
        __Pyx_SET_REFCNT(self, refcnt);
    }
#if CYTHON_COMPILING_IN_CPYTHON
    assert(PyType_IS_GC(Py_TYPE(self)) &&
           _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, void *context)
{
    PyObject *name = self->gi_name;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
#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;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(self->gi_name, value);
    return 0;
}
static PyObject *
__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context)
{
    PyObject *name = self->gi_qualname;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
#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;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(self->gi_qualname, value);
    return 0;
}
static PyObject *
__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context)
{
    PyObject *frame = self->gi_frame;
    CYTHON_UNUSED_VAR(context);
    if (!frame) {
        if (unlikely(!self->gi_code)) {
            Py_RETURN_NONE;
        }
        frame = (PyObject *) PyFrame_New(
            PyThreadState_Get(),            /*PyThreadState *tstate,*/
            (PyCodeObject*) self->gi_code,  /*PyCodeObject *code,*/
            __pyx_d,                 /*PyObject *globals,*/
            0                               /*PyObject *locals*/
        );
        if (unlikely(!frame))
            return NULL;
        self->gi_frame = frame;
    }
    Py_INCREF(frame);
    return frame;
}
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;
    #if PY_VERSION_HEX >= 0x030B00a4
    gen->gi_exc_state.exc_value = NULL;
    #else
    gen->gi_exc_state.exc_type = NULL;
    gen->gi_exc_state.exc_value = NULL;
    gen->gi_exc_state.exc_traceback = NULL;
    #endif
#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;
    gen->gi_frame = NULL;
    PyObject_GC_Track(gen);
    return gen;
}

/* PyObject_GenericGetAttrNoDict */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) {
    __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp);
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'",
                 type_name, attr_name);
#else
                 "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'",
                 type_name, PyString_AS_STRING(attr_name));
#endif
    __Pyx_DECREF_TypeName(type_name);
    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

/* 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 (unlikely(!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},
    {(char *) "__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0},
#if CYTHON_USE_TYPE_SPECS
    {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0},
#endif
    {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},
    {(char *) "gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL,
     (char*) PyDoc_STR("Frame of the generator"), 0},
    {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_GeneratorType_slots[] = {
    {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc},
    {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse},
    {Py_tp_iter, (void *)PyObject_SelfIter},
    {Py_tp_iternext, (void *)__Pyx_Generator_Next},
    {Py_tp_methods, (void *)__pyx_Generator_methods},
    {Py_tp_members, (void *)__pyx_Generator_memberlist},
    {Py_tp_getset, (void *)__pyx_Generator_getsets},
    {Py_tp_getattro, (void *) __Pyx_PyObject_GenericGetAttrNoDict},
#if CYTHON_USE_TP_FINALIZE
    {Py_tp_finalize, (void *)__Pyx_Coroutine_del},
#endif
    {0, 0},
};
static PyType_Spec __pyx_GeneratorType_spec = {
    __PYX_TYPE_MODULE_PREFIX "generator",
    sizeof(__pyx_CoroutineObject),
    0,
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE,
    __pyx_GeneratorType_slots
};
#else
static PyTypeObject __pyx_GeneratorType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    __PYX_TYPE_MODULE_PREFIX "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 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
    0,
#endif
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
    0,
#endif
};
#endif
static int __pyx_Generator_init(PyObject *module) {
#if CYTHON_USE_TYPE_SPECS
    __pyx_GeneratorType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_GeneratorType_spec, NULL);
#else
    (void) module;
    __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
    __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter;
    __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type);
#endif
    if (unlikely(!__pyx_GeneratorType)) {
        return -1;
    }
    return 0;
}

/* GeneratorYieldFrom */
#if CYTHON_USE_TYPE_SLOTS
static void __Pyx_PyIter_CheckErrorAndDecref(PyObject *source) {
    __Pyx_TypeName source_type_name = __Pyx_PyType_GetName(Py_TYPE(source));
    PyErr_Format(PyExc_TypeError,
        "iter() returned non-iterator of type '" __Pyx_FMT_TYPENAME "'", source_type_name);
    __Pyx_DECREF_TypeName(source_type_name);
    Py_DECREF(source);
}
#endif
static CYTHON_INLINE PyObject* __Pyx_Generator_Yield_From(__pyx_CoroutineObject *gen, PyObject *source) {
    PyObject *source_gen, *retval;
#ifdef __Pyx_Coroutine_USED
    if (__Pyx_Coroutine_Check(source)) {
        Py_INCREF(source);
        source_gen = source;
        retval = __Pyx_Generator_Next(source);
    } else
#endif
    {
#if CYTHON_USE_TYPE_SLOTS
        if (likely(Py_TYPE(source)->tp_iter)) {
            source_gen = Py_TYPE(source)->tp_iter(source);
            if (unlikely(!source_gen))
                return NULL;
            if (unlikely(!PyIter_Check(source_gen))) {
                __Pyx_PyIter_CheckErrorAndDecref(source_gen);
                return NULL;
            }
        } else
#endif
        {
            source_gen = PyObject_GetIter(source);
            if (unlikely(!source_gen))
                return NULL;
        }
        retval = __Pyx_PyObject_GetIterNextFunc(source_gen)(source_gen);
    }
    if (likely(retval)) {
        gen->yieldfrom = source_gen;
        return retval;
    }
    Py_DECREF(source_gen);
    return NULL;
}

/* IterNext */
static PyObject *__Pyx_PyIter_Next2Default(PyObject* defval) {
    PyObject* exc_type;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    exc_type = __Pyx_PyErr_Occurred();
    if (unlikely(exc_type)) {
        if (!defval || unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))
            return NULL;
        __Pyx_PyErr_Clear();
        Py_INCREF(defval);
        return defval;
    }
    if (defval) {
        Py_INCREF(defval);
        return defval;
    }
    __Pyx_PyErr_SetNone(PyExc_StopIteration);
    return NULL;
}
static void __Pyx_PyIter_Next_ErrorNoIterator(PyObject *iterator) {
    __Pyx_TypeName iterator_type_name = __Pyx_PyType_GetName(Py_TYPE(iterator));
    PyErr_Format(PyExc_TypeError,
        __Pyx_FMT_TYPENAME " object is not an iterator", iterator_type_name);
    __Pyx_DECREF_TypeName(iterator_type_name);
}
static CYTHON_INLINE PyObject *__Pyx_PyIter_Next2(PyObject* iterator, PyObject* defval) {
    PyObject* next;
    iternextfunc iternext = Py_TYPE(iterator)->tp_iternext;
    if (likely(iternext)) {
#if CYTHON_USE_TYPE_SLOTS
        next = iternext(iterator);
        if (likely(next))
            return next;
        if (unlikely(iternext == &_PyObject_NextNotImplemented))
            return NULL;
#else
        next = PyIter_Next(iterator);
        if (likely(next))
            return next;
#endif
    } else if (CYTHON_USE_TYPE_SLOTS || unlikely(!PyIter_Check(iterator))) {
        __Pyx_PyIter_Next_ErrorNoIterator(iterator);
        return NULL;
    }
#if !CYTHON_USE_TYPE_SLOTS
    else {
        next = PyIter_Next(iterator);
        if (likely(next))
            return next;
    }
#endif
    return __Pyx_PyIter_Next2Default(defval);
}

/* ExtTypeTest */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    __Pyx_TypeName obj_type_name;
    __Pyx_TypeName type_name;
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(__Pyx_TypeCheck(obj, type)))
        return 1;
    obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj));
    type_name = __Pyx_PyType_GetName(type);
    PyErr_Format(PyExc_TypeError,
                 "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME,
                 obj_type_name, type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    __Pyx_DECREF_TypeName(type_name);
    return 0;
}

/* PyIntCompare */
static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) {
    CYTHON_MAYBE_UNUSED_VAR(intval);
    CYTHON_UNUSED_VAR(inplace);
    if (op1 == op2) {
        Py_RETURN_TRUE;
    }
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long a = PyInt_AS_LONG(op1);
        if (a == b) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        int unequal;
        unsigned long uintval;
        Py_ssize_t size = Py_SIZE(op1);
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        if (intval == 0) {
            if (size == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE;
        } else if (intval < 0) {
            if (size >= 0)
                Py_RETURN_FALSE;
            intval = -intval;
            size = -size;
        } else {
            if (size <= 0)
                Py_RETURN_FALSE;
        }
        uintval = (unsigned long) intval;
#if PyLong_SHIFT * 4 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 4)) {
            unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 3 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 3)) {
            unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 2 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 2)) {
            unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
#if PyLong_SHIFT * 1 < SIZEOF_LONG*8
        if (uintval >> (PyLong_SHIFT * 1)) {
            unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK))
                 | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK));
        } else
#endif
            unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK));
        if (unequal == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        const long b = intval;
#if CYTHON_COMPILING_IN_LIMITED_API
        double a = __pyx_PyFloat_AsDouble(op1);
#else
        double a = PyFloat_AS_DOUBLE(op1);
#endif
        if ((double)a == (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE;
    }
    return (
        PyObject_RichCompare(op1, op2, Py_EQ));
}

/* PyIntBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(intval);
    CYTHON_MAYBE_UNUSED_VAR(inplace);
    CYTHON_UNUSED_VAR(zerodivision_check);
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long x;
        long a = PyInt_AS_LONG(op1);
        
            x = (long)((unsigned long)a - b);
            if (likely((x^a) >= 0 || (x^~b) >= 0))
                return PyInt_FromLong(x);
            return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        const long b = intval;
        long a, x;
#ifdef HAVE_LONG_LONG
        const PY_LONG_LONG llb = intval;
        PY_LONG_LONG lla, llx;
#endif
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        const Py_ssize_t size = Py_SIZE(op1);
        if (unlikely(size == 0)) {
            return PyLong_FromLong(-intval);
        }
        if (likely(__Pyx_sst_abs(size) <= 1)) {
            a = likely(size) ? digits[0] : 0;
            if (size == -1) a = -a;
        } else {
            switch (size) {
                case -2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case 2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case -3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case 3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case -4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                case 4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
                    #ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
                    #endif
                    }
                    CYTHON_FALLTHROUGH;
                default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
            }
        }
                x = a - b;
            return PyLong_FromLong(x);
#ifdef HAVE_LONG_LONG
        long_long:
                llx = lla - llb;
            return PyLong_FromLongLong(llx);
#endif
        
        
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        const long b = intval;
#if CYTHON_COMPILING_IN_LIMITED_API
        double a = __pyx_PyFloat_AsDouble(op1);
#else
        double a = PyFloat_AS_DOUBLE(op1);
#endif
            double result;
            
            PyFPE_START_PROTECT("subtract", return NULL)
            result = ((double)a) - (double)b;
            PyFPE_END_PROTECT(result)
            return PyFloat_FromDouble(result);
    }
    return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2);
}
#endif

/* RaiseClosureNameError */
static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) {
    PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname);
}

/* ReturnWithStopIteration */
static void __Pyx__ReturnWithStopIteration(PyObject* value) {
    PyObject *exc, *args;
#if CYTHON_COMPILING_IN_CPYTHON
    __Pyx_PyThreadState_declare
    if ((PY_VERSION_HEX >= 0x03030000 && PY_VERSION_HEX < 0x030500B1)
            || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) {
        args = PyTuple_New(1);
        if (unlikely(!args)) return;
        Py_INCREF(value);
        PyTuple_SET_ITEM(args, 0, value);
        exc = PyType_Type.tp_call(PyExc_StopIteration, args, NULL);
        Py_DECREF(args);
        if (!exc) return;
    } else {
        Py_INCREF(value);
        exc = value;
    }
    #if CYTHON_FAST_THREAD_STATE
    __Pyx_PyThreadState_assign
    #if CYTHON_USE_EXC_INFO_STACK
    if (!__pyx_tstate->exc_info->exc_value)
    #else
    if (!__pyx_tstate->exc_type)
    #endif
    {
        Py_INCREF(PyExc_StopIteration);
        __Pyx_ErrRestore(PyExc_StopIteration, exc, NULL);
        return;
    }
    #endif
#else
    args = PyTuple_Pack(1, value);
    if (unlikely(!args)) return;
    exc = PyObject_Call(PyExc_StopIteration, args, NULL);
    Py_DECREF(args);
    if (unlikely(!exc)) return;
#endif
    PyErr_SetObject(PyExc_StopIteration, exc);
    Py_DECREF(exc);
}

/* RaiseUnboundLocalError */
static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
}

/* SliceTupleAndList */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) {
    Py_ssize_t start = *_start, stop = *_stop, length = *_length;
    if (start < 0) {
        start += length;
        if (start < 0)
            start = 0;
    }
    if (stop < 0)
        stop += length;
    else if (stop > length)
        stop = length;
    *_length = stop - start;
    *_start = start;
    *_stop = stop;
}
static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    Py_ssize_t length = PyList_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    if (length <= 0) {
        return PyList_New(0);
    }
    return __Pyx_PyList_FromArray(((PyListObject*)src)->ob_item + start, length);
}
static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    Py_ssize_t length = PyTuple_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    return __Pyx_PyTuple_FromArray(((PyTupleObject*)src)->ob_item + start, length);
}
#endif

/* PyObjectCallMethod0 */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
    PyObject *method = NULL, *result = NULL;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_CallOneArg(method, obj);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) goto bad;
    result = __Pyx_PyObject_CallNoArg(method);
    Py_DECREF(method);
bad:
    return result;
}

/* ValidateBasesTuple */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) {
    Py_ssize_t i, n = PyTuple_GET_SIZE(bases);
    for (i = 1; i < n; i++)
    {
        PyObject *b0 = PyTuple_GET_ITEM(bases, i);
        PyTypeObject *b;
#if PY_MAJOR_VERSION < 3
        if (PyClass_Check(b0))
        {
            PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class",
                         PyString_AS_STRING(((PyClassObject*)b0)->cl_name));
            return -1;
        }
#endif
        b = (PyTypeObject*) b0;
        if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE))
        {
            __Pyx_TypeName b_name = __Pyx_PyType_GetName(b);
            PyErr_Format(PyExc_TypeError,
                "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name);
            __Pyx_DECREF_TypeName(b_name);
            return -1;
        }
        if (dictoffset == 0 && b->tp_dictoffset)
        {
            __Pyx_TypeName b_name = __Pyx_PyType_GetName(b);
            PyErr_Format(PyExc_TypeError,
                "extension type '%.200s' has no __dict__ slot, "
                "but base type '" __Pyx_FMT_TYPENAME "' has: "
                "either add 'cdef dict __dict__' to the extension type "
                "or add '__slots__ = [...]' to the base type",
                type_name, b_name);
            __Pyx_DECREF_TypeName(b_name);
            return -1;
        }
    }
    return 0;
}
#endif

/* PyType_Ready */
static int __Pyx_PyType_Ready(PyTypeObject *t) {
#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION)
    (void)__Pyx_PyObject_CallMethod0;
#if CYTHON_USE_TYPE_SPECS
    (void)__Pyx_validate_bases_tuple;
#endif
    return PyType_Ready(t);
#else
    int r;
    PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
    if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1))
        return -1;
#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION)
    {
        int gc_was_enabled;
    #if PY_VERSION_HEX >= 0x030A00b1
        gc_was_enabled = PyGC_Disable();
        (void)__Pyx_PyObject_CallMethod0;
    #else
        PyObject *ret, *py_status;
        PyObject *gc = NULL;
        #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400)
        gc = PyImport_GetModule(__pyx_kp_u_gc);
        #endif
        if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc);
        if (unlikely(!gc)) return -1;
        py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled);
        if (unlikely(!py_status)) {
            Py_DECREF(gc);
            return -1;
        }
        gc_was_enabled = __Pyx_PyObject_IsTrue(py_status);
        Py_DECREF(py_status);
        if (gc_was_enabled > 0) {
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable);
            if (unlikely(!ret)) {
                Py_DECREF(gc);
                return -1;
            }
            Py_DECREF(ret);
        } else if (unlikely(gc_was_enabled == -1)) {
            Py_DECREF(gc);
            return -1;
        }
    #endif
        t->tp_flags |= Py_TPFLAGS_HEAPTYPE;
#else
        (void)__Pyx_PyObject_CallMethod0;
#endif
    r = PyType_Ready(t);
#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION)
        t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE;
    #if PY_VERSION_HEX >= 0x030A00b1
        if (gc_was_enabled)
            PyGC_Enable();
    #else
        if (gc_was_enabled) {
            PyObject *tp, *v, *tb;
            PyErr_Fetch(&tp, &v, &tb);
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable);
            if (likely(ret || r == -1)) {
                Py_XDECREF(ret);
                PyErr_Restore(tp, v, tb);
            } else {
                Py_XDECREF(tp);
                Py_XDECREF(v);
                Py_XDECREF(tb);
                r = -1;
            }
        }
        Py_DECREF(gc);
    #endif
    }
#endif
    return r;
#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

/* SetupReduce */
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
  int ret;
  PyObject *name_attr;
  name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name_2);
  if (likely(name_attr)) {
      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
  } else {
      ret = -1;
  }
  if (unlikely(ret < 0)) {
      PyErr_Clear();
      ret = 0;
  }
  Py_XDECREF(name_attr);
  return ret;
}
static int __Pyx_setup_reduce(PyObject* type_obj) {
    int ret = 0;
    PyObject *object_reduce = NULL;
    PyObject *object_getstate = NULL;
    PyObject *object_reduce_ex = NULL;
    PyObject *reduce = NULL;
    PyObject *reduce_ex = NULL;
    PyObject *reduce_cython = NULL;
    PyObject *setstate = NULL;
    PyObject *setstate_cython = NULL;
    PyObject *getstate = NULL;
#if CYTHON_USE_PYTYPE_LOOKUP
    getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate);
#else
    getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate);
    if (!getstate && PyErr_Occurred()) {
        goto __PYX_BAD;
    }
#endif
    if (getstate) {
#if CYTHON_USE_PYTYPE_LOOKUP
        object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate);
#else
        object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate);
        if (!object_getstate && PyErr_Occurred()) {
            goto __PYX_BAD;
        }
#endif
        if (object_getstate != getstate) {
            goto __PYX_GOOD;
        }
    }
#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_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython);
            if (likely(reduce_cython)) {
                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;
            } else if (reduce == object_reduce || PyErr_Occurred()) {
                goto __PYX_BAD;
            }
            setstate = __Pyx_PyObject_GetAttrStrNoError(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_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython);
                if (likely(setstate_cython)) {
                    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;
                } else if (!setstate || PyErr_Occurred()) {
                    goto __PYX_BAD;
                }
            }
            PyType_Modified((PyTypeObject*)type_obj);
        }
    }
    goto __PYX_GOOD;
__PYX_BAD:
    if (!PyErr_Occurred()) {
        __Pyx_TypeName type_obj_name =
            __Pyx_PyType_GetName((PyTypeObject*)type_obj);
        PyErr_Format(PyExc_RuntimeError,
            "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name);
        __Pyx_DECREF_TypeName(type_obj_name);
    }
    ret = -1;
__PYX_GOOD:
#if !CYTHON_USE_PYTYPE_LOOKUP
    Py_XDECREF(object_reduce);
    Py_XDECREF(object_reduce_ex);
    Py_XDECREF(object_getstate);
    Py_XDECREF(getstate);
#endif
    Py_XDECREF(reduce);
    Py_XDECREF(reduce_ex);
    Py_XDECREF(reduce_cython);
    Py_XDECREF(setstate);
    Py_XDECREF(setstate_cython);
    return ret;
}
#endif

/* SetVTable */
static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) {
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
    if (unlikely(!ob))
        goto bad;
#if CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_n_s_pyx_vtable, ob) < 0))
#else
    if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_n_s_pyx_vtable, ob) < 0))
#endif
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* GetVTable */
static void* __Pyx_GetVtable(PyTypeObject *type) {
    void* ptr;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable);
#else
    PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable);
#endif
    if (!ob)
        goto bad;
    ptr = PyCapsule_GetPointer(ob, 0);
    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;
}

/* MergeVTables */
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_MergeVtables(PyTypeObject *type) {
    int i;
    void** base_vtables;
    __Pyx_TypeName tp_base_name;
    __Pyx_TypeName base_name;
    void* unknown = (void*)-1;
    PyObject* bases = type->tp_bases;
    int base_depth = 0;
    {
        PyTypeObject* base = type->tp_base;
        while (base) {
            base_depth += 1;
            base = base->tp_base;
        }
    }
    base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1));
    base_vtables[0] = unknown;
    for (i = 1; i < PyTuple_GET_SIZE(bases); i++) {
        void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i)));
        if (base_vtable != NULL) {
            int j;
            PyTypeObject* base = type->tp_base;
            for (j = 0; j < base_depth; j++) {
                if (base_vtables[j] == unknown) {
                    base_vtables[j] = __Pyx_GetVtable(base);
                    base_vtables[j + 1] = unknown;
                }
                if (base_vtables[j] == base_vtable) {
                    break;
                } else if (base_vtables[j] == NULL) {
                    goto bad;
                }
                base = base->tp_base;
            }
        }
    }
    PyErr_Clear();
    free(base_vtables);
    return 0;
bad:
    tp_base_name = __Pyx_PyType_GetName(type->tp_base);
    base_name = __Pyx_PyType_GetName((PyTypeObject*)PyTuple_GET_ITEM(bases, i));
    PyErr_Format(PyExc_TypeError,
        "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name);
    __Pyx_DECREF_TypeName(tp_base_name);
    __Pyx_DECREF_TypeName(base_name);
    free(base_vtables);
    return -1;
}
#endif

/* 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, size_t alignment, enum __Pyx_ImportType_CheckSize check_size)
{
    PyObject *result = 0;
    char warning[200];
    Py_ssize_t basicsize;
    Py_ssize_t itemsize;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_basicsize;
    PyObject *py_itemsize;
#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;
    }
#if !CYTHON_COMPILING_IN_LIMITED_API
    basicsize = ((PyTypeObject *)result)->tp_basicsize;
    itemsize = ((PyTypeObject *)result)->tp_itemsize;
#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;
    py_itemsize = PyObject_GetAttrString(result, "__itemsize__");
    if (!py_itemsize)
        goto bad;
    itemsize = PyLong_AsSsize_t(py_itemsize);
    Py_DECREF(py_itemsize);
    py_itemsize = 0;
    if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
#endif
    if (itemsize) {
        if (size % alignment) {
            alignment = size % alignment;
        }
        if (itemsize < (Py_ssize_t)alignment)
            itemsize = (Py_ssize_t)alignment;
    }
    if ((size_t)(basicsize + itemsize) < 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+itemsize);
        goto bad;
    }
    if (check_size == __Pyx_ImportType_CheckSize_Error &&
            ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd-%zd from PyObject",
            module_name, class_name, size, basicsize, basicsize+itemsize);
        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

/* Import */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *module = 0;
    PyObject *empty_dict = 0;
    PyObject *empty_list = 0;
    #if PY_MAJOR_VERSION < 3
    PyObject *py_import;
    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
    if (unlikely(!py_import))
        goto bad;
    if (!from_list) {
        empty_list = PyList_New(0);
        if (unlikely(!empty_list))
            goto bad;
        from_list = empty_list;
    }
    #endif
    empty_dict = PyDict_New();
    if (unlikely(!empty_dict))
        goto bad;
    {
        #if PY_MAJOR_VERSION >= 3
        if (level == -1) {
            if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) {
                #if CYTHON_COMPILING_IN_LIMITED_API
                module = PyImport_ImportModuleLevelObject(
                    name, empty_dict, empty_dict, from_list, 1);
                #else
                module = PyImport_ImportModuleLevelObject(
                    name, __pyx_d, empty_dict, from_list, 1);
                #endif
                if (unlikely(!module)) {
                    if (unlikely(!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 (unlikely(!py_level))
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL);
            Py_DECREF(py_level);
            #else
            #if CYTHON_COMPILING_IN_LIMITED_API
            module = PyImport_ImportModuleLevelObject(
                name, empty_dict, empty_dict, from_list, level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, __pyx_d, empty_dict, from_list, level);
            #endif
            #endif
        }
    }
bad:
    Py_XDECREF(empty_dict);
    Py_XDECREF(empty_list);
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(py_import);
    #endif
    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)) {
        const char* module_name_str = 0;
        PyObject* module_name = 0;
        PyObject* module_dot = 0;
        PyObject* full_name = 0;
        PyErr_Clear();
        module_name_str = PyModule_GetName(module);
        if (unlikely(!module_name_str)) { goto modbad; }
        module_name = PyUnicode_FromString(module_name_str);
        if (unlikely(!module_name)) { goto modbad; }
        module_dot = PyUnicode_Concat(module_name, __pyx_kp_u__5);
        if (unlikely(!module_dot)) { goto modbad; }
        full_name = PyUnicode_Concat(module_dot, name);
        if (unlikely(!full_name)) { goto modbad; }
        #if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM  < 0x07030400)
        {
            PyObject *modules = PyImport_GetModuleDict();
            if (unlikely(!modules))
                goto modbad;
            value = PyObject_GetItem(modules, full_name);
        }
        #else
        value = PyImport_GetModule(full_name);
        #endif
      modbad:
        Py_XDECREF(full_name);
        Py_XDECREF(module_dot);
        Py_XDECREF(module_name);
    }
    if (unlikely(!value)) {
        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;
}

/* ImportDottedModule */
#if PY_MAJOR_VERSION >= 3
static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) {
    PyObject *partial_name = NULL, *slice = NULL, *sep = NULL;
    if (unlikely(PyErr_Occurred())) {
        PyErr_Clear();
    }
    if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) {
        partial_name = name;
    } else {
        slice = PySequence_GetSlice(parts_tuple, 0, count);
        if (unlikely(!slice))
            goto bad;
        sep = PyUnicode_FromStringAndSize(".", 1);
        if (unlikely(!sep))
            goto bad;
        partial_name = PyUnicode_Join(sep, slice);
    }
    PyErr_Format(
#if PY_MAJOR_VERSION < 3
        PyExc_ImportError,
        "No module named '%s'", PyString_AS_STRING(partial_name));
#else
#if PY_VERSION_HEX >= 0x030600B1
        PyExc_ModuleNotFoundError,
#else
        PyExc_ImportError,
#endif
        "No module named '%U'", partial_name);
#endif
bad:
    Py_XDECREF(sep);
    Py_XDECREF(slice);
    Py_XDECREF(partial_name);
    return NULL;
}
#endif
#if PY_MAJOR_VERSION >= 3
static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) {
    PyObject *imported_module;
#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM  < 0x07030400)
    PyObject *modules = PyImport_GetModuleDict();
    if (unlikely(!modules))
        return NULL;
    imported_module = __Pyx_PyDict_GetItemStr(modules, name);
    Py_XINCREF(imported_module);
#else
    imported_module = PyImport_GetModule(name);
#endif
    return imported_module;
}
#endif
static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) {
#if PY_MAJOR_VERSION < 3
    PyObject *module, *from_list, *star = __pyx_n_s__33;
    CYTHON_UNUSED_VAR(parts_tuple);
    from_list = PyList_New(1);
    if (unlikely(!from_list))
        return NULL;
    Py_INCREF(star);
    PyList_SET_ITEM(from_list, 0, star);
    module = __Pyx_Import(name, from_list, 0);
    Py_DECREF(from_list);
    return module;
#else
    Py_ssize_t i, nparts;
    PyObject *imported_module;
    PyObject *module = __Pyx_Import(name, NULL, 0);
    if (!parts_tuple || unlikely(!module))
        return module;
    imported_module = __Pyx__ImportDottedModule_Lookup(name);
    if (likely(imported_module)) {
        Py_DECREF(module);
        return imported_module;
    }
    PyErr_Clear();
    nparts = PyTuple_GET_SIZE(parts_tuple);
    for (i=1; i < nparts && module; i++) {
        PyObject *part, *submodule;
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        part = PyTuple_GET_ITEM(parts_tuple, i);
#else
        part = PySequence_ITEM(parts_tuple, i);
#endif
        submodule = __Pyx_PyObject_GetAttrStrNoError(module, part);
#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
        Py_DECREF(part);
#endif
        Py_DECREF(module);
        module = submodule;
    }
    if (likely(module))
        return module;
    return __Pyx__ImportDottedModule_Error(name, parts_tuple, i);
#endif
}
static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1
    PyObject *module = __Pyx__ImportDottedModule_Lookup(name);
    if (likely(module)) {
        PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec);
        if (likely(spec)) {
            PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing);
            if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) {
                Py_DECREF(spec);
                spec = NULL;
            }
            Py_XDECREF(unsafe);
        }
        if (likely(!spec)) {
            PyErr_Clear();
            return module;
        }
        Py_DECREF(spec);
        Py_DECREF(module);
    } else if (PyErr_Occurred()) {
        PyErr_Clear();
    }
#endif
    return __Pyx__ImportDottedModule(name, parts_tuple);
}

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

/* 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_GetAttrStrNoError(metaclass, __pyx_n_s_prepare);
        if (prep) {
            PyObject *pargs[3] = {NULL, name, bases};
            ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw);
            Py_DECREF(prep);
        } else {
            if (unlikely(PyErr_Occurred()))
                return NULL;
            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 PY_VERSION_HEX >= 0x03030000
    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
#else
    CYTHON_MAYBE_UNUSED_VAR(qualname);
#endif
    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
    return ns;
bad:
    Py_DECREF(ns);
    return NULL;
}
#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS
static int __Pyx_SetNamesPEP487(PyObject *type_obj) {
    PyTypeObject *type = (PyTypeObject*) type_obj;
    PyObject *names_to_set, *key, *value, *set_name, *tmp;
    Py_ssize_t i = 0;
#if CYTHON_USE_TYPE_SLOTS
    names_to_set = PyDict_Copy(type->tp_dict);
#else
    {
        PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict);
        names_to_set = NULL;
        if (likely(d)) {
            PyObject *names_to_set = PyDict_New();
            int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1;
            Py_DECREF(d);
            if (unlikely(ret < 0))
                Py_CLEAR(names_to_set);
        }
    }
#endif
    if (unlikely(names_to_set == NULL))
        goto bad;
    while (PyDict_Next(names_to_set, &i, &key, &value)) {
        set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name);
        if (unlikely(set_name != NULL)) {
            tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key);
            Py_DECREF(set_name);
            if (unlikely(tmp == NULL)) {
                __Pyx_TypeName value_type_name =
                    __Pyx_PyType_GetName(Py_TYPE(value));
                __Pyx_TypeName type_name = __Pyx_PyType_GetName(type);
                PyErr_Format(PyExc_RuntimeError,
#if PY_MAJOR_VERSION >= 3
                    "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'",
                    value_type_name, key, type_name);
#else
                    "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'",
                    value_type_name,
                    PyString_Check(key) ? PyString_AS_STRING(key) : "?",
                    type_name);
#endif
                goto bad;
            } else {
                Py_DECREF(tmp);
            }
        }
        else if (unlikely(PyErr_Occurred())) {
            goto bad;
        }
    }
    Py_DECREF(names_to_set);
    return 0;
bad:
    Py_XDECREF(names_to_set);
    return -1;
}
static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) {
#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    PyTypeObject *type = (PyTypeObject*) type_obj;
    PyObject *mro = type->tp_mro;
    Py_ssize_t i, nbases;
    if (unlikely(!mro)) goto done;
    (void) &__Pyx_GetBuiltinName;
    Py_INCREF(mro);
    nbases = PyTuple_GET_SIZE(mro);
    assert(PyTuple_GET_ITEM(mro, 0) == type_obj);
    for (i = 1; i < nbases-1; i++) {
        PyObject *base, *dict, *meth;
        base = PyTuple_GET_ITEM(mro, i);
        dict = ((PyTypeObject *)base)->tp_dict;
        meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass);
        if (unlikely(meth)) {
            descrgetfunc f = Py_TYPE(meth)->tp_descr_get;
            PyObject *res;
            Py_INCREF(meth);
            if (likely(f)) {
                res = f(meth, NULL, type_obj);
                Py_DECREF(meth);
                if (unlikely(!res)) goto bad;
                meth = res;
            }
            res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw);
            Py_DECREF(meth);
            if (unlikely(!res)) goto bad;
            Py_DECREF(res);
            goto done;
        } else if (unlikely(PyErr_Occurred())) {
            goto bad;
        }
    }
done:
    Py_XDECREF(mro);
    return type_obj;
bad:
    Py_XDECREF(mro);
    Py_DECREF(type_obj);
    return NULL;
#else
    PyObject *super_type, *super, *func, *res;
#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type)
    super_type = __Pyx_GetBuiltinName(__pyx_n_s_super);
#else
    super_type = (PyObject*) &PySuper_Type;
    (void) &__Pyx_GetBuiltinName;
#endif
    super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL;
#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type)
    Py_XDECREF(super_type);
#endif
    if (unlikely(!super)) {
        Py_CLEAR(type_obj);
        goto done;
    }
    func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass);
    Py_DECREF(super);
    if (likely(!func)) {
        if (unlikely(PyErr_Occurred()))
            Py_CLEAR(type_obj);
        goto done;
    }
    res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw);
    Py_DECREF(func);
    if (unlikely(!res))
        Py_CLEAR(type_obj);
    Py_XDECREF(res);
done:
    return type_obj;
#endif
}
#endif
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
                                      PyObject *dict, PyObject *mkw,
                                      int calculate_metaclass, int allow_py2_metaclass) {
    PyObject *result;
    PyObject *owned_metaclass = NULL;
    PyObject *margs[4] = {NULL, name, bases, dict};
    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;
    }
    result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET,
#if PY_VERSION_HEX < 0x030600A4
        (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw
#else
        mkw
#endif
    );
    Py_XDECREF(owned_metaclass);
#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS
    if (likely(result) && likely(PyType_Check(result))) {
        if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) {
            Py_CLEAR(result);
        } else {
            result = __Pyx_InitSubclassPEP487(result, mkw);
        }
    }
#else
    (void) &__Pyx_GetBuiltinName;
#endif
    return result;
}

/* CyFunctionClassCell */
static int __Pyx_CyFunction_InitClassCell(PyObject *cyfunctions, PyObject *classobj) {
    Py_ssize_t i, count = PyList_GET_SIZE(cyfunctions);
    for (i = 0; i < count; i++) {
        __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *)
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            PyList_GET_ITEM(cyfunctions, i);
#else
            PySequence_ITEM(cyfunctions, i);
        if (unlikely(!m))
            return -1;
#endif
        __Pyx_CyFunction_SetClassObj(m, classobj);
#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
        Py_DECREF((PyObject*)m);
#endif
    }
    return 0;
}

/* ClassMethod */
static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
#if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM <= 0x05080000
    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
        return PyClassMethod_New(method);
    }
#else
#if CYTHON_COMPILING_IN_PYPY
    if (PyMethodDescr_Check(method))
#else
    #if PY_MAJOR_VERSION == 2
    static PyTypeObject *methoddescr_type = NULL;
    if (unlikely(methoddescr_type == NULL)) {
       PyObject *meth = PyObject_GetAttrString((PyObject*)&PyList_Type, "append");
       if (unlikely(!meth)) return NULL;
       methoddescr_type = Py_TYPE(meth);
       Py_DECREF(meth);
    }
    #else
    PyTypeObject *methoddescr_type = &PyMethodDescr_Type;
    #endif
    if (__Pyx_TypeCheck(method, methoddescr_type))
#endif
    {
        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
        #if PY_VERSION_HEX < 0x03020000
        PyTypeObject *d_type = descr->d_type;
        #else
        PyTypeObject *d_type = descr->d_common.d_type;
        #endif
        return PyDescr_NewClassMethod(d_type, descr->d_method);
    }
#endif
    else if (PyMethod_Check(method)) {
        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
    }
    else {
        return PyClassMethod_New(method);
    }
}

/* GetNameInClass */
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name) {
    PyObject *result;
    PyObject *dict;
    assert(PyType_Check(nmspace));
#if CYTHON_USE_TYPE_SLOTS
    dict = ((PyTypeObject*)nmspace)->tp_dict;
    Py_XINCREF(dict);
#else
    dict = PyObject_GetAttr(nmspace, __pyx_n_s_dict);
#endif
    if (likely(dict)) {
        result = PyObject_GetItem(dict, name);
        Py_DECREF(dict);
        if (result) {
            return result;
        }
    }
    PyErr_Clear();
    __Pyx_GetModuleGlobalNameUncached(result, name);
    return result;
}

/* CLineInTraceback */
#ifndef CYTHON_CLINE_IN_TRACEBACK
static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED 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_GetAttrStrNoError(__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;
        (void) 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 */
#if !CYTHON_COMPILING_IN_LIMITED_API
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);
}
#endif

/* AddTraceback */
#include "compile.h"
#include "frameobject.h"
#include "traceback.h"
#if PY_VERSION_HEX >= 0x030b00a6
  #ifndef Py_BUILD_CORE
    #define Py_BUILD_CORE 1
  #endif
  #include "internal/pycore_frame.h"
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    if (c_line) {
        (void) __pyx_cfilenm;
        (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line);
    }
    _PyTraceback_Add(funcname, filename, py_line);
}
#else
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = NULL;
    PyObject *py_funcname = NULL;
    #if PY_MAJOR_VERSION < 3
    PyObject *py_srcfile = NULL;
    py_srcfile = PyString_FromString(filename);
    if (!py_srcfile) goto bad;
    #endif
    if (c_line) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        if (!py_funcname) goto bad;
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        if (!py_funcname) goto bad;
        funcname = PyUnicode_AsUTF8(py_funcname);
        if (!funcname) goto bad;
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        if (!py_funcname) goto bad;
        #endif
    }
    #if PY_MAJOR_VERSION < 3
    py_code = __Pyx_PyCode_New(
        0,
        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);
    #else
    py_code = PyCode_NewEmpty(filename, funcname, py_line);
    #endif
    Py_XDECREF(py_funcname);  // XDECREF since it's only set on Py3 if cline
    return py_code;
bad:
    Py_XDECREF(py_funcname);
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(py_srcfile);
    #endif
    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;
    PyObject *ptype, *pvalue, *ptraceback;
    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) {
        __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) {
            /* If the code object creation fails, then we should clear the
               fetched exception references and propagate the new exception */
            Py_XDECREF(ptype);
            Py_XDECREF(pvalue);
            Py_XDECREF(ptraceback);
            goto bad;
        }
        __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
        __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);
}
#endif

/* 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;\
    }

/* CIntFromPy */
static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if ((sizeof(unsigned int) < sizeof(long))) {
            __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (unsigned 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 (unsigned int) 0;
                case  1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, digits[0])
                case 2:
                    if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT)) {
                            return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT)) {
                            return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned int) >= 4 * PyLong_SHIFT)) {
                            return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned 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 (unsigned int) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if ((sizeof(unsigned int) <= sizeof(unsigned long))) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if ((sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG))) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned 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 (unsigned int) 0;
                case -1: __PYX_VERIFY_RETURN_INT(unsigned int, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(unsigned int,  digit, +digits[0])
                case -2:
                    if ((8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) {
                            return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) {
                            return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) {
                            return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) {
                            return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned int) - 1 > 4 * PyLong_SHIFT)) {
                            return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned int) - 1 > 4 * PyLong_SHIFT)) {
                            return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if ((sizeof(unsigned int) <= sizeof(long))) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if ((sizeof(unsigned int) <= sizeof(PY_LONG_LONG))) {
                __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if (CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available, cannot convert large numbers");
#else
            unsigned 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 (unsigned int) -1;
        }
    } else {
        unsigned int val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (unsigned int) -1;
        val = __Pyx_PyInt_As_unsigned_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to unsigned int");
    return (unsigned int) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to unsigned int");
    return (unsigned int) -1;
}

/* CIntFromPy */
static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if ((sizeof(uint32_t) < sizeof(long))) {
            __PYX_VERIFY_RETURN_INT(uint32_t, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (uint32_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 (uint32_t) 0;
                case  1: __PYX_VERIFY_RETURN_INT(uint32_t, digit, digits[0])
                case 2:
                    if ((8 * sizeof(uint32_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) >= 2 * PyLong_SHIFT)) {
                            return (uint32_t) (((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(uint32_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) >= 3 * PyLong_SHIFT)) {
                            return (uint32_t) (((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(uint32_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_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(uint32_t) >= 4 * PyLong_SHIFT)) {
                            return (uint32_t) (((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_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 (uint32_t) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if ((sizeof(uint32_t) <= sizeof(unsigned long))) {
                __PYX_VERIFY_RETURN_INT_EXC(uint32_t, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if ((sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG))) {
                __PYX_VERIFY_RETURN_INT_EXC(uint32_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 (uint32_t) 0;
                case -1: __PYX_VERIFY_RETURN_INT(uint32_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(uint32_t,  digit, +digits[0])
                case -2:
                    if ((8 * sizeof(uint32_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (uint32_t) (((uint32_t)-1)*(((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(uint32_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (uint32_t) ((((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (uint32_t) (((uint32_t)-1)*(((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(uint32_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (uint32_t) ((((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_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(uint32_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (uint32_t) (((uint32_t)-1)*(((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(uint32_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_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(uint32_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (uint32_t) ((((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if ((sizeof(uint32_t) <= sizeof(long))) {
                __PYX_VERIFY_RETURN_INT_EXC(uint32_t, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if ((sizeof(uint32_t) <= sizeof(PY_LONG_LONG))) {
                __PYX_VERIFY_RETURN_INT_EXC(uint32_t, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if (CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available, cannot convert large numbers");
#else
            uint32_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 (uint32_t) -1;
        }
    } else {
        uint32_t val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (uint32_t) -1;
        val = __Pyx_PyInt_As_uint32_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to uint32_t");
    return (uint32_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to uint32_t");
    return (uint32_t) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const long neg_one = (long) -1, const_zero = (long) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(long) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(long) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(long),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(uint32_t) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(uint32_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(uint32_t) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(uint32_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(uint32_t),
                                     little, !is_unsigned);
    }
}

/* CIntFromPy */
static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const size_t neg_one = (size_t) -1, const_zero = (size_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if ((sizeof(size_t) < sizeof(long))) {
            __PYX_VERIFY_RETURN_INT(size_t, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (size_t) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (size_t) 0;
                case  1: __PYX_VERIFY_RETURN_INT(size_t, digit, digits[0])
                case 2:
                    if ((8 * sizeof(size_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 2 * PyLong_SHIFT)) {
                            return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(size_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 3 * PyLong_SHIFT)) {
                            return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(size_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 4 * PyLong_SHIFT)) {
                            return (size_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (size_t) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if ((sizeof(size_t) <= sizeof(unsigned long))) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if ((sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG))) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (size_t) 0;
                case -1: __PYX_VERIFY_RETURN_INT(size_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(size_t,  digit, +digits[0])
                case -2:
                    if ((8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(size_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(size_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(size_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (size_t) ((((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if ((sizeof(size_t) <= sizeof(long))) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if ((sizeof(size_t) <= sizeof(PY_LONG_LONG))) {
                __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if (CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available, cannot convert large numbers");
#else
            size_t val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (size_t) -1;
        }
    } else {
        size_t val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (size_t) -1;
        val = __Pyx_PyInt_As_size_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to size_t");
    return (size_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to size_t");
    return (size_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const long neg_one = (long) -1, const_zero = (long) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    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 || CYTHON_COMPILING_IN_LIMITED_API) && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available, 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_int64_t(int64_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int64_t) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int64_t) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(uint16_t) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(uint16_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(uint16_t) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(uint16_t),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(unsigned int) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(unsigned int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(unsigned int) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(unsigned 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(unsigned int),
                                     little, !is_unsigned);
    }
}

/* CIntFromPy */
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const int neg_one = (int) -1, const_zero = (int) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    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 || CYTHON_COMPILING_IN_LIMITED_API) && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available, 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;
}

/* FormatTypeName */
#if CYTHON_COMPILING_IN_LIMITED_API
static __Pyx_TypeName
__Pyx_PyType_GetName(PyTypeObject* tp)
{
    PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
                                               __pyx_n_s_name_2);
    if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) {
        PyErr_Clear();
        Py_XSETREF(name, __Pyx_NewRef(__pyx_n_s__134));
    }
    return name;
}
#endif

/* FastTypeChecks */
#if CYTHON_COMPILING_IN_CPYTHON
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
    while (a) {
        a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*);
        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);
}
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (cls == a || cls == b) return 1;
    mro = cls->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            PyObject *base = PyTuple_GET_ITEM(mro, i);
            if (base == (PyObject *)a || base == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, 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) {
    if (exc_type1) {
        return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2);
    } else {
        return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
    }
}
#endif
static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    assert(PyExceptionClass_Check(exc_type));
    n = PyTuple_GET_SIZE(tuple);
#if PY_MAJOR_VERSION >= 3
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
#endif
    for (i=0; i<n; i++) {
        PyObject *t = PyTuple_GET_ITEM(tuple, i);
        #if PY_MAJOR_VERSION < 3
        if (likely(exc_type == t)) return 1;
        #endif
        if (likely(PyExceptionClass_Check(t))) {
            if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
        } else {
        }
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
    if (likely(err == exc_type)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        if (likely(PyExceptionClass_Check(exc_type))) {
            return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
        } else if (likely(PyTuple_Check(exc_type))) {
            return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
        } else {
        }
    }
    return PyErr_GivenExceptionMatches(err, exc_type);
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
    assert(PyExceptionClass_Check(exc_type1));
    assert(PyExceptionClass_Check(exc_type2));
    if (likely(err == exc_type1 || err == exc_type2)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
    }
    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
}
#endif

/* CheckBinaryVersion */
static int __Pyx_check_binary_version(void) {
    char ctversion[5];
    int same=1, i, found_dot;
    const char* rt_from_call = Py_GetVersion();
    PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    found_dot = 0;
    for (i = 0; i < 4; i++) {
        if (!ctversion[i]) {
            same = (rt_from_call[i] < '0' || rt_from_call[i] > '9');
            break;
        }
        if (rt_from_call[i] != ctversion[i]) {
            same = 0;
            break;
        }
    }
    if (!same) {
        char rtversion[5] = {'\0'};
        char message[200];
        for (i=0; i<4; ++i) {
            if (rt_from_call[i] == '.') {
                if (found_dot) break;
                found_dot = 1;
            } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') {
                break;
            }
            rtversion[i] = rt_from_call[i];
        }
        PyOS_snprintf(message, sizeof(message),
                      "compile time 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 (!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);
    *f = tmp.fp;
    if (!(*f))
        goto bad;
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(d);
    return -1;
}
#endif

/* InitStrings */
#if PY_MAJOR_VERSION >= 3
static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) {
    if (t.is_unicode | t.is_str) {
        if (t.intern) {
            *str = PyUnicode_InternFromString(t.s);
        } else if (t.encoding) {
            *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL);
        } else {
            *str = PyUnicode_FromStringAndSize(t.s, t.n - 1);
        }
    } else {
        *str = PyBytes_FromStringAndSize(t.s, t.n - 1);
    }
    if (!*str)
        return -1;
    if (PyObject_Hash(*str) == -1)
        return -1;
    return 0;
}
#endif
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION >= 3
        __Pyx_InitString(*t, t->p);
        #else
        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);
        }
        if (!*t->p)
            return -1;
        if (PyObject_Hash(*t->p) == -1)
            return -1;
        #endif
        ++t;
    }
    return 0;
}
#endif

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 && !CYTHON_COMPILING_IN_LIMITED_API) || (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) {
    __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result));
#if PY_MAJOR_VERSION >= 3
    if (PyLong_Check(result)) {
        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ").  "
                "The ability to return an instance of a strict subclass of int is deprecated, "
                "and may be removed in a future version of Python.",
                result_type_name)) {
            __Pyx_DECREF_TypeName(result_type_name);
            Py_DECREF(result);
            return NULL;
        }
        __Pyx_DECREF_TypeName(result_type_name);
        return result;
    }
#endif
    PyErr_Format(PyExc_TypeError,
                 "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")",
                 type_name, type_name, result_type_name);
    __Pyx_DECREF_TypeName(result_type_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 Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
  if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
    return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
#if PY_MAJOR_VERSION < 3
  } else if (likely(PyInt_CheckExact(o))) {
    return PyInt_AS_LONG(o);
#endif
  } else {
    Py_ssize_t ival;
    PyObject *x;
    x = PyNumber_Index(o);
    if (!x) return -1;
    ival = PyInt_AsLong(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);
}


/* #### Code section: utility_code_pragmas_end ### */
#if _MSV_VER
#pragma warning( pop )
#endif



/* #### Code section: end ### */
#endif /* Py_PYTHON_H */
